MjAwNS0wNS0wNSAgQW50b24gQmxhbmNoYXJkICA8YW50b25Ac2FtYmEub3JnPgoKCSogcHJvY2Vzcy5jIChwdHJhY2VfY21kcyk6IEFkZCBQVFJBQ0VfR0VUVlJSRUdTIGFuZCBQVFJBQ0VfU0VUVlJSRUdTCglpZiBkZWZpbmVkLgoKMjAwNS0wNS0wOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogUmVmdXNlIG5lZ2F0aXZlIC1zIGFyZ3VtZW50IHZhbHVlLgoJRml4ZXMgRGViaWFuIGJ1ZyAjMzAzMjU2LgoKMjAwNS0wNC0yNSAgQW50b24gQmxhbmNoYXJkICA8YW50b25Ac2FtYmEub3JnPgoKCSogZmlsZS5jIChvcGVubW9kZXMpOiBBZGQgT19OT0FUSU1FIGZsYWcgaWYgZGVmaW5lZC4KCjIwMDUtMDQtMDUgIEFudG9uIEJsYW5jaGFyZCAgPGFudG9uQHNhbWJhLm9yZz4KCgkqIGxpbnV4L3Bvd2VycGMvaW9jdGxlbnQuaDogUmVnZW5lcmF0ZWQuCgoJKiBzaWduYWwuYyAoc2lnbmFtZSk6IERvbid0IHRyeSBhbmQgZGVyZWZlcmVuY2UgbmVnYXRpdmUgaW5kZXguCgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogQWRkIGRlYnVnX3NldGNvbnRleHQsIHZzZXJ2ZXIsCgltYmluZCwgKl9tZW1wb2xpY3ksIG1xXyosIHN5c19rZXhlY19sb2FkLCBhZGRfa2V5LCByZXF1ZXN0X2tleSwKCWtleWN0bCwgd2FpdGlkLCBzeXNfc2VtdGltZWRvcC4gIEZpeCB2YXJpb3VzIG90aGVyIHN5c2NhbGxzLgoKCSogaXBjLmMgKHNobV9yZXNvdXJjZV9mbGFncyk6IE5ldyB2YXJpYWJsZSwgdGFibGUgaGFzIFNITV9IVUdFVExCCglidXQgbm90IElQQ19OT1dBSVQsIHdoaWNoIGhhdmUgdGhlIHNhbWUgdmFsdWUuCgkoc3lzX3NobWdldCk6IFVzZSB0aGF0IGluc3RlYWQgb2YgcmVzb3VyY2VfZmxhZ3MuCgoyMDA1LTAzLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZGVzYy5jIChkZWNvZGVfc2VsZWN0KTogSW5jcmVhc2UgbG9jYWwgYnVmZmVyIHNpemUuCglGaXhlcyBSSCMxNTE1NzAuCgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjExLgoJKiBkZWJpYW4vY2hhbmdlbG9nLCBzdHJhY2Uuc3BlYzogNC41LjExLTEuCgoJKiBsaW51eC9hcm0vc3lzY2FsbGVudC5oOiBGaXggMTEzIGVudHJ5IChzeXNjYWxsLCBub3Qgdm04Nm9sZCkuCgoyMDA1LTAzLTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS4xMC4KCSogZGViaWFuL2NoYW5nZWxvZywgc3RyYWNlLnNwZWM6IDQuNS4xMC0xLgoKMjAwNS0wMi0yNiAgR09UTyBNYXNhbm9yaSAgPGdvdG9tQGRlYmlhbi5vci5qcD4KCgkqIGxpbnV4L2FscGhhL3N5c2NhbGxlbnQuaDogRml4IHRoZSByZXZlcnNlZCBvcmRlciBvZiBsc3RhdDY0IGFuZAoJZnN0YXQ2NC4gIENsZWFuIHVwIG9zZl9ucmVjdm1zZyBhbmQgb3NmX25nZXRzb2NrbmFtZS4KCjIwMDUtMDItMjggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CgoJKiBzeXNjYWxsLmMgKGdldHJ2YWwyKTogTW92ZSAjaWZkZWYgSUE2NCBpbnNpZGUgI2lmZGVmIExJTlVYLgoKMjAwNS0wMy0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBVcGRhdGUgdmFyaW91cyBjYWxscy4KCUZyb20gVGhpZW1vIFNldWZlciA8dGhzQG5ldHdvcmtuby5kZT4uCglGaXhlcyBEZWJpYW4gYnVnICMyNTY2ODQuCgoJKiBkZWJpYW4vY29udHJvbCAoQXJjaGl0ZWN0dXJlKTogQWRkIHMzOTAuCglGaXhlcyBEZWJpYW4gYnVnICMyOTQxNzIuCgoyMDA1LTAzLTA2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLmMgKHRyYWNlKSBbUFRSQUNFX0dFVFNJR0lORk9dOiBGZXRjaCBzaWdpbmZvX3QgZm9yIFNJR1NFR1YKCWFuZCBTSUdCVVMgc2lnbmFscywgdXNlIHNpX2FkZHIgaW4gb3V0cHV0LgoKMjAwNS0wMy0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGZpbGUuYyAocHJpbnRfeGF0dHJfdmFsKTogQWRkIGEgY2FzdC4KCjIwMDUtMDItMDUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZXNjLmMgKGRlY29kZV9zZWxlY3QpOiBDYWxjdWxhdGUgc2l6ZSBvZiBwYXNzZWQgZmRfc2V0IHZlY3RvcnMgYW5kCgljb3B5IGluIHRoZSB1c2VyJ3Mgc2l6ZSByYXRoZXIgdGhhbiB0aGUgc3RhbmRhcmQgc2l6ZW9mKGZkX3NldCkuCglGaXhlcyBEZWJpYW4gYnVnICM2NTY1NCwgIzI4NDI5MC4KCgkqIHV0aWwuYyAocHJpbnRwYXRoLCBwcmludHBhdGhuKTogUHJpbnQgTlVMTCBhbmQgZG9uJ3QgdHJ5IGFueSBmZXRjaAoJd2hlbiBBRERSIGlzIHplcm8uCglGaXhlcyBEZWJpYW4gYnVnICM2MzA5My4KCgkqIGRlYmlhbi9jb250cm9sIChCdWlsZC1EZXBlbmRzKTogRml4IGZvciBzMzkwIGFuZCBzcGFyYy4KCUZyb20gQmFzdGlhbiBCbGFuayA8d2FsZGlAZGViaWFuLm9yZz4uCglGaXhlcyBEZWJpYW4gYnVnICMyOTM1NjQuCgoyMDA0LTEyLTE5ICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogc3RyYWNlLmMgKG1haW4pIFshVVNFX1BST0NGU106IEluIGNoaWxkIHByb2Nlc3MsIHJhaXNlIFNJR1NUT1AKCXJpZ2h0IGJlZm9yZSBleGVjdigpIGNhbGwuICBSZW1vdmUgZmFrZV9leGVjdmUoKSBjYWxsLgoJKiBkZWZzLmggKGZha2VfZXhlY3ZlKTogUmVtb3ZlIHVudXNlZCBkZWNsYXJhdGlvbi4KCSogcHJvY2Vzcy5jIChmYWtlX2V4ZWN2ZSk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCglGaXhlcyBSSCMxNDMzNjUuCgoyMDA1LTAyLTA0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS45LgoJKiBkZWJpYW4vY2hhbmdlbG9nLCBzdHJhY2Uuc3BlYzogNC41LjktMi4KCgkqIGZpbGUuYyAoT19MQVJHRUZJTEUpOiBPbWl0IHdoZW4gI3VuZGVmJ2QgYmVjYXVzZSBpdCB3YXMgemVyby4KCjIwMDUtMDItMDIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWJpYW4vY29udHJvbDogQWRkIHN0cmFjZS11ZGViIHBhY2thZ2UgZm9yIGluc3RhbGxlciBkZWJ1Z2dpbmcuCgkqIGRlYmlhbi9ydWxlcyAoYmluYXJ5LWFyY2gpOiBCdWlsZCBpdC4KCUZyb20gSm9zaHVhIEt3YW4gPGpvc2hrQHRyaXBsZWhlbGl4Lm9yZz4uCglGaXhlcyBEZWJpYW4gYnVnICMyNjgyOTQuCgoJKiBmaWxlLmMgKG9wZW5tb2RlcykgW09fTEFSR0VGSUxFXSBbT19MQVJHRUZJTEUgPT0gMF06IFJlZGVmaW5lIHRvCglrbm93biB2YWx1ZXMgZm9yIExpbnV4LgoKCSogdXRpbC5jIChwcmludGNhbGwpOiBQcmludCAxNiA/cyB3aGVuIGxvbmcgaXMgOCBieXRlcy4KCUZpeGVzIFJIIzE0NjkzMi4KCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaDogRGVjbGFyZSBzeXNfZXBvbGxfY3JlYXRlLCBzeXNfZXBvbGxfY3RsLAoJc3lzX2Vwb2xsX3dhaXQuCgkqIGxpbnV4L3NwYXJjNjQvc3lzY2FsbC5oOiBKdXN0ICNpbmNsdWRlICIuLi9zcGFyYy9zeXNjYWxsLmgiIGhlcmUuCgkqIGlvY3RsLmMgKG5pb2N0bGVudHMyKTogQWRkIGNvbnN0IHRvIHR5cGUuCglGaXhlcyBEZWJpYW4gYnVnICMyNzg0NDkuCgoJKiBzb2NrLmMgKGlmZmZsYWdzKTogTmV3IHZhcmlhYmxlLCB0YWJsZSBvZiBJRkZfKiB2YWx1ZXMuCgkocHJpbnRfYWRkcik6IE5ldyBmdW5jdGlvbi4KCShzb2NrX2lvY3RsKTogSGFuZGxlIFNJT0NHSUZBRERSLCBTSU9DR0lGRFNUQUREUiwgU0lPQ0dJRkJSREFERFIsCglTSU9DR0lGTkVUTUFTSywgU0lPQ0dJRkZMQUdTLCBTSU9DR0lGTUVUUklDLCBTSU9DR0lGTVRVLCBTSU9DR0lGU0xBVkUsCglTSU9DR0lGSFdBRERSLglVc2UgcHJpbnRfYWRkciBmb3IgU0lPQ0dJRkNPTkYsIFNJT0NHSUZOQU1FLCBhbmQKCVNJT0NHSUZJTkRFWCwgYW5kIGZpeCB0aGVpciBvdXRwdXQuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTM4MjIzLgoJRml4ZXMgRGViaWFuIGJ1ZyAjMTkyMTY0LgoKMjAwNC0xMi0yMCAgRG1pdHJ5IFYuIExldmluICA8bGR2QGFsdGxpbnV4Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogVXNlIEFDX0dOVV9TT1VSQ0UgbWFjcm8gaW5zdGVhZCBvZiBjaGFuZ2luZyBDRkxBR1MuCgkqIGRlZnMuaCBbSEFWRV9DT05GSUdfSF06IEluY2x1ZGUgY29uZmlnLmggZmlyc3QuCgkqIHN0cmFjZS5jOiBJbmNsdWRlICJkZWZzLmgiIGZpcnN0LgoJRml4ZXMgUkgjMTQzMzcwLgoKCSogc3lzY2FsbC5jIChjYWxsX3N1bW1hcnkpOiBGaXggcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2UuCglGaXhlcyBSSCMxNDMzNjkuCgoyMDA0LTEyLTE5ICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogc3lzY2FsbC5jIChxdWFsX3NpZ25hbCk6IENoZWNrIGJvdW5kcyBmb3IgbnVtZXJpYyBzaWduYWwgbmFtZXMuCglGaXggcGFyc2VyIG9mIHN5bWJvbGljIHNpZ25hbCBuYW1lcy4KCUZpeCByZXR1cm4gY29kZSwgYXMgcmVxdWlyZWQgYnkgcXVhbGlmeSgpIGZ1bmN0aW9uLgoJKiBzeXNjYWxsLmMgKHF1YWxfZGVzYyk6IENoZWNrIGJvdW5kcyBmb3IgZGVzY3JpcHRvciBudW1iZXIuCgkqIHN5c2NhbGwuYyAocXVhbF9zeXNjYWxsKTogQ29ycmVjdCByZXR1cm4gY29kZSwgdG8gYmUgY29uc2lzdGVudAoJd2l0aCBxdWFsaWZ5KCkgYW5kIG90aGVyIHF1YWxfKiBmdW5jdGlvbnMuCglGaXhlcyBSSCMxNDMzNjIuCgoyMDA1LTAyLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3lzdGVtLmMgW0xJTlVYXSAoTVNfTUFORExPQ0ssIE1TX05PQVRJTUUsIE1TX05PRElSQVRJTUUsIE1TX0JJTkQsCglNU19NT1ZFLCBNU19SRUMsIE1TX1ZFUkJPU0UsIE1TX1BPU0lYQUNMLCBNU19BQ1RJVkUsIE1TX05PVVNFUik6CglOZXcgbWFjcm9zLgoJW0xJTlVYXSAobW91bnRfZmxhZ3MpOiBBZGQgdGhlbS4KCVtMSU5VWF0gKHN5c19tb3VudCk6IElmIGFueSBvZiAoTVNfQklORHxNU19NT1ZFfE1TX1JFTU9VTlQpIGJpdHMgYXJlCglzZXQgaW4gdGhlIGZsYWdzIGFyZ3VtZW50LCBkb24ndCB0cnkgdG8gZmV0Y2ggdGhlIGZpbGVzeXN0ZW0gc3RyaW5nLgoJRml4ZXMgUkgjMTQxOTMyLgoKCSogY29uZmlnLmd1ZXNzOiBVcGRhdGUgZnJvbSBjYW5vbmljYWwgdmVyc2lvbiwgdGltZXN0YW1wIDIwMDQtMTEtMTIuCgkqIGNvbmZpZy5zdWI6IExpa2V3aXNlLCB0aW1lc3RhbXAgMjAwNC0xMS0zMC4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIFtYODZfNjRdIChzeXNfYXJjaF9wcmN0bCk6IE5ldyBmdW5jdGlvbi4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIGl0LgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBVc2UgaXQuCglQYXJ0IG9mIFJIIzE0MjY2Ny4KCgkqIHByb2Nlc3MuYyAoc3lzX3NjaGVkX3NldHNjaGVkdWxlcik6IFVzZSAlI2x4IGZvcm1hdCBmb3IgYmFkIHBvaW50ZXIuCgkoc3lzX3NjaGVkX2dldHBhcmFtLCBzeXNfc2NoZWRfc2V0cGFyYW0pOiBMaWtld2lzZS4KCVBhcnQgb2YgUkgjMTQyNjY3LgoKCSogc2lnbmFsLmMgW0hBVkVfU0lHQUNUSU9OXSBbTElOVVggJiYgWDg2XzY0XSAoU0FfUkVTVE9SRVIpOiBEZWZpbmUKCWhlcmUgdG9vLgoJUGFydCBvZiBSSCMxNDI2NjcuCgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVzZSBzeXNfbWluY29yZSBpbnN0ZWFkIG9mIHByaW50YXJncy4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuICBBbHNvIHVzZSBzeXNfZ2V0cmxpbWl0LAoJc3lzX3NlbXRpbWVkb3AsIHN5c191bW91bnQyLgoJUGFydCBvZiBSSCMxNDI2NjcuCgoJKiBzeXNjYWxsLmMgKHF1YWxfc2lnbmFsKTogRml4IGludmVydGVkIHJldHVybiB2YWx1ZSBhbmQgYm9ndXMKCWFyZ3VtZW50IHRvIHF1YWxpZnlfb25lIGluIHRoZSBuYW1lZCBjYXNlLgoKCSogZmlsZS5jIChwcmludF94YXR0cl92YWwpOiBEb24ndCB1c2UgYXV0byBhcnJheSBzaXplZCBieSBzeXNjYWxsCglhcmd1bWVudC4gIFVzZSBtYWxsb2MgaW5zdGVhZCwgc28gaXQgY2FuIGZhaWwgZm9yIGluc2FuZSB2YWx1ZXMuCglGaXhlcyBEZWJpYW4gYnVnICMyODM3MDQuCgoJKiBuZXQuYyAoc3lzX2dldHNvY2tvcHQpOiBGaXggYSBmb3JtYXQgJWxkIC0+ICVkLgoKCSogbGludXgvc3lzY2FsbC5oIFtJQTY0XSAoU1lTX3NlbXRpbWVkb3ApOiAjdW5kZWYgaXQuCgoJKiBzeXNjYWxsLmMgKHN5c2NhbGxfZW50ZXIpIFtYODZfNjRdOiBGaXggMzItYml0IGFyZ3VtZW50IHJlZ2lzdGVyIG1hcAoJbm90IHRvIGRvdWJsZSB0aGUgbWlkZGxlIGVudHJ5IQoJRml4ZXMgUkgjMTQ2MDkzLgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogRml4IGV4aXRfZ3JvdXAgZW50cnkuCgoJKiB1dGlsLmMgKGdldHBjKSBbUzM5MCB8fCBTMzkwWF06IEltcGxlbWVudCBpdC4KCVBhdGNoIGJ5IERhdmlkIFdpbGRlciA8d2lsZGVyQHVzLmlibS5jb20+LgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEFkZCBmYWR2aXNlNjQsIGZzdGF0ZnM2NCwgc3RhdGZzNjQsIG1iaW5kLAoJW2dzXWV0X21lbXBvbGljeSwgbXFfKiwgc3lzX2tleGVjX2xvYWQsIHZzZXJ2ZXIsIGFuZCB3YWl0aWQuCglGaXhlcyBSSCMxNDYyNDUuCgoyMDA1LTAxLTIyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogbmV0LmMgKHN5c19nZXRzb2Nrb3B0KTogQ2hhbmdlIHR5cGUgb2YgbGVuIHRvIGludC4KCjIwMDQtMTAtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjguCgkqIGRlYmlhbi9jaGFuZ2Vsb2csIHN0cmFjZS5zcGVjOiA0LjUuOC0xLgoKCSogZmlsZS5jIChzeXNfZmFkdmlzZTY0KTogQ29uZGl0aW9uYWxpemUganVzdCBvbiBbTElOVVhdLgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3lzL2Vwb2xsLmguCgkqIGRlc2MuYzogUHJvdGVjdCAjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+IHdpdGggW0hBVkVfU1lTX0VQT0xMX0hdLgoJKGVwb2xsY3RscywgZXBvbGxldmVudHMpOiBQcm90ZWN0IGVhY2ggZW50cnkgd2l0aCAjaWZkZWYgb24gaXRzIG1hY3JvLgoKCSogc3RyYWNlLmMgKGhhbmRsZV9ncm91cF9leGl0KTogRG9uJ3QgZGV0YWNoIGxlYWRlciB0aGF0IHdhc24ndAoJVENCX0FUVEFDSEVELiAgSW5zdGVhZCBtYXJrIGl0IHdpdGggVENCX0dST1VQX0VYSVRJTkcuCglSZW1vdmUgZHJvcHRjYiBsb29wIGF0IGVuZCwgbm8gbG9uZ2VyIHJlcXVpcmVkIHNpbmNlIDIuNiByZXBvcnRzIGVhY2gKCXRocmVhZCBkZWF0aC4KCUZpeGVzIFJIIzEzNTI1NC4KCgkqIHN0cmFjZS5jICh0cmFjZSk6IFVzZSBoYW5kbGVfZ3JvdXBfZXhpdCBmb3Igbm9uLVRDQl9BVFRBQ0hFRCBjaGlsZAoJdGFraW5nIHNpZ25hbCB3aGVuIGl0IGhhcyBuY2xvbmVfdGhyZWFkcyA+IDAuCgoJKiBzdHJhY2UuYyAoaGFuZGxlX2dyb3VwX2V4aXQsIHRyYWNlKTogTWFyayBsZWFkZXIgd2l0aAoJVENCX0dST1VQX0VYSVRJTkcgYW5kIGRvbid0IGJlIHN1cnByaXNlZCBhdCBjaGlsZCBkZWF0aHMgd2hlbiB0aGVpcgoJbGVhZGVyIGhhcyBpdCBzZXQuCglGaXhlcyBSSCMxMzIxNTAuCgoJKiBwcm9jZXNzLmMgKFdDT1JFRkxBRyk6IERlZmluZSBpZiBub3QgZGVmaW5lZC4KCShXX1NUT1BDT0RFLCBXX0VYSVRDT0RFKTogTGlrZXdpc2UuCglSZXBvcnRlZCBieSBNYXJ0eSBMZWlzbmVyIDxtbGVpc25lckBlbmcubWMueGVyb3guY29tPi4KCgkqIHNvY2suYyBbISBMSU5VWF06IEluY2x1ZGUgPHN5cy9zb2NrZXQuaD4gYmVmb3JlIDxzeXMvc29ja2lvLmg+LgoJUmVwb3J0ZWQgYnkgTWFydHkgTGVpc25lciA8bWxlaXNuZXJAZW5nLm1jLnhlcm94LmNvbT4uCgoJKiBkZWJpYW4vcnVsZXM6IE1ha2Ugc3RyYWNlNjQuMS5neiBzeW1saW5rIHRvIHN0cmFjZS4xLmd6IGluc3RlYWQgb2YKCXN0cmFjZTY0LjEgdG8gc3RyYWNlLjEsIHdoaWNoIGRvZXNuJ3QgZXhpc3QuCglGaXhlcyBEZWJpYW4gYnVnICMyNjkyMjAuCgoyMDA0LTA5LTA1ICBQaGlsIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBsaW51eC9hcm0vc3lzY2FsbGVudC5oOiBOZXcgZmlsZS4KCjIwMDQtMTAtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWJpYW4vcnVsZXMgKERFQl9CVUlMRF9HTlVfVFlQRSwgQ09ORklHX09QVFMpOiBOZXcgdmFyaWFibGVzLgoJWyQoREVCX0hPU1RfR05VX1RZUEUpID09IHMzOTAtbGludXhdIChidWlsZDY0LCBIT1NUNjQsIENDNjQpOiBTZXQgdGhlbS4KCShidWlsZC9NYWtlZmlsZSk6IFVzZSAkKENPTkZJR19PUFRTKS4KCShidWlsZDY0L01ha2VmaWxlKTogUGFzcyAtLWhvc3QgYXMgd2VsbCBhcyAtLWJ1aWxkLgoJRnJvbSBCYXN0aWFuIEJsYW5rIDx3YWxkaUBkZWJpYW4ub3JnPi4KCUZpeGVzIERlYmlhbiBidWcgIzI3MTUwMC4KCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBVcGRhdGUgZm9yIDIuNi45IHN5c2NhbGxzLgoJRnJvbSBSYW5kb2xwaCBDaHVuZyA8dGF1c3FAZGViaWFuLm9yZz4KCUZpeGVzIERlYmlhbiBidWcgIzI3Mzg4Ny4KCgkqIGZpbGUuYyAoc3lzX2xsc2Vlayk6IFJldmVydCBsYXN0IGNoYW5nZS4KCjIwMDQtMDktMTQgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHR3aWRkbGUubmV0PgoKCSogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oOiBBZGQgdGdraWxsLCAqc3RhdDY0LCB2c2VydmVyLCBtYmluZCwKCVtnc11ldF9tZW1wb2xpY3ksIG1xXyosIHdhaXRpZC4KCjIwMDQtMTAtMDcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBmaWxlLmMgKHN5c19sbHNzZWssIHN5c19yZWFkYWhlYWQsIHN5c19mYWR2aXNlNjQsIHN5c19mYWR2aXNlNjRfNjQpOgoJVXNlIExPTkdfTE9ORyBtYWNyby4KCSogaW8uYyAoc3lzX3ByZWFkLCBzeXNfcHdyaXRlLCBzeXNfc2VuZGZpbGUpOiBMaWtld2lzZS4KCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IEZpeCBib3RjaGVkIHRhYmxlIGVudHJpZXMuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKCSogbWVtLmMgW0xJTlVYXSAoc3lzX21iaW5kLCBzeXNfc2V0X21lbXBvbGljeSwgc3lzX2dldF9tZW1wb2xpY3kpOgoJTmV3IGZ1bmN0aW9ucy4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHRoZW0uCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogSGFuZGxlIG1iaW5kLCBzZXRfbWVtcG9saWN5LCBnZXRfbWVtcG9saWN5LgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCgkqIGZpbGUuYyBbTElOVVggJiYgKEkzODYgfHwgWDg2XzY0KV0gKHN5c19mYWR2aXNlNjQsIHN5c19mYWR2aXNlNjRfNjQpOgoJTmV3IGZ1bmN0aW9ucy4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHRoZW0uCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogSGFuZGxlIGZhZHZpc2U2NCBhbmQgZmFkdmlzZTY0XzY0IHVzaW5nIHRob3NlLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoyMDA0LTA5LTEzICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogbGludXgvaW9jdGxzb3J0LmMgKG1haW4pOiBPbWl0IGR1cGxpY2F0ZSBsaW5lcwoJKHdpdGggc2FtZSBuYW1lIGFuZCBjb2RlKSBmcm9tIG91dHB1dC4KCSogbGludXgvaW9jdGxlbnQuc2g6IEJ1aWxkIHRoZSBsaXN0IG9mIGlvY3RscyBkZWZpbmVkIGluCglzY3NpL3NnLmggKDB4MjIuLiksIHNjc2kvc2NzaS5oIGFuZCBzY3NpL3Njc2lfaW9jdGwuaCAoMHg1My4uKSwKCWFzIHN1Z2dlc3RlZCBieSBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+CgkqIGxpbnV4L2lvY3RsZW50Lmg6IFJlZ2VuZXJhdGVkLgoJRml4ZXMgUkgjMTI5ODA4LgoKMjAwNC0wOS0xMyAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4KCSAgICBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CgoJKiB0aW1lLmMgW0xJTlVYXSAocHJpbnRfcnRjKTogTmV3IGZ1bmN0aW9uLCBmb3IgcHJpbnRpbmcgcnRjX3RpbWUKCXN0cnVjdHVyZS4KCVtMSU5VWF0gKHJ0Y19pb2N0bCk6IE5ldyBmdW5jdGlvbiwgZm9yIHBhcnNpbmcgUlRDXyogaW9jdGxzLgoJKiBpb2N0bC5jIFtMSU5VWF0gKGlvY3RsX2RlY29kZSk6IENhbGwgcnRjX2lvY3RsLgoJKiBkZWZzLmggW0xJTlVYXTogRGVjbGFyZSBydGNfaW9jdGwuCglGaXhlcyBSSCM1ODYwNi4KCjIwMDQtMTAtMDYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZXNjLmMgW0xJTlVYXSAoc3lzX2Vwb2xsX2NyZWF0ZSwgc3lzX2Vwb2xsX2N0bCwgc3lzX2Vwb2xsX3dhaXQpOgoJTmV3IGZ1bmN0aW9ucy4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHRoZW0uCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXNlIHRob3NlIGZvciBlcG9sbF8qIHN5c2NhbGxzLgoJKiBsaW51eC9hbHBoYS9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zMzkwL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3NwYXJjNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc3BhcmM2NC9zeXNjYWxsZW50Mi5oOiBMaWtld2lzZS4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTM0NDYzLgoKCSogcmVzb3VyY2UuYyAocmVzb3VyY2VzKTogQWRkIFJMSU1JVF9MT0NLUywgUkxJTUlUX1NJR1BFTkRJTkcsCglhbmQgUkxJTUlUX01TR1FVRVVFLCBpZiBkZWZpbmVkLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzEzMzU5NC4KCgkqIG5ldC5jIFtIQVZFX1NFTkRNU0ddIChwcmludGNtc2doZHIpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRtc2doZHIpOiBVc2UgaXQuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTMxNjg5LgoKCSogZmlsZS5jIChzcHJpbnRtb2RlKTogQWRkIGNvbnN0IHRvIHJldHVybiB0eXBlLgoJKHNwcmludGZzdHlwZSk6IExpa2V3aXNlLgoJKiBzaWduYWwuYyAocHJpbnRzaWdpbmZvKTogQWRkIGEgY29uc3QuCgoyMDA0LTA5LTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogVXNlIHN5c193YWl0aWQuCgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IHdhaXRpZCB0YWtlcyA1IGFyZ3VtZW50cywgYW5kIGlzIGluIFRQIGNhdGVnb3J5LgoJKiBwcm9jZXNzLmMgKHN5c193YWl0aWQpOiBIYW5kbGUgZmlmdGggYXJndW1lbnQgKHN0cnVjdCBydXNhZ2UgKikuCgoyMDA0LTA5LTExICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogdGltZS5jIChzeXNfY2xvY2tfbmFub3NsZWVwKTogUHJpbnQgemVybyBmbGFncyBhcmcgY29ycmVjdGx5LgoJKHN5c190aW1lcl9zZXR0aW1lKTogTGlrZXdpc2UuCgkocHJpbnRzaWdldmVudCk6IFByaW50IHNpZ25hbHMgYnkgbmFtZSBmb3IgU0lHRVZfU0lHTkFMLgoJKHN5c190aW1lcl9jcmVhdGUpOiBQcmludCBjbG9jayBJRCBzeW1ib2xpY2FsbHkuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTMxNDIwLgoKMjAwNC0wOS0wNyAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCgkqIGRlZnMuaCAobmlvY3RsZW50czEsIG5zaWduYWxzMik6IEZpeCB0eXBvcyBpbiBkZWNscy4KCjIwMDQtMDktMDMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKHF1YWxfb3B0aW9ucyk6IEFkZCBjb25zdCB0byBkZWZuLgoJVXBkYXRlIGFsbCB1c2VzLgoJKGNhbGxfY291bnQsIGVycm9yX2NvdW50LCB0dl9jb3VudCk6IFZhcmlhYmxlcyByZW1vdmVkLgoJKHN0cnVjdCBjYWxsX2NvdW50cywgY291bnRzKTogTmV3IHR5cGUgYW5kIHZhcmlhYmxlLgoJVXBkYXRlIGFsbCB1c2VycyBvZiB0aGUgb2xkIHRocmVlIHRvIHVzZSB0aGUgbmV3IGFycmF5IG9mIHN0cnVjdHMuCgkodHJhY2Vfc3lzY2FsbCk6IEFsbG9jYXRlIGNvdW50cyBvbiBmaXJzdCB1c2UuCgkoc29ydGVkX2NvdW50KTogVmFyaWFibGUgcmVtb3ZlZC4KCShjYWxsX3N1bW1hcnkpOiBBbGxvY2F0ZSBsb2NhbGx5LgoKCSogc3lzY2FsbC5jIChzeXNlbnQwLCBzeXNlbnQxLCBzeXNlbnQyLCBzeXNlbnQpOiBBZGQgY29uc3QgdG8gZGVmbi4KCShuc3lzY2FsbHMwLCBuc3lzY2FsbHMxLCBuc3lzY2FsbHMyKTogTGlrZXdpc2UuCgkoZXJybm9lbnQwLCBlcnJub2VudDEsIGVycm5vZW50MiwgZXJybm9lbnQpOiBMaWtld2lzZS4KCShuZXJybm9zMCwgbmVycm5vczEsIG5lcnJub3MyKTogTGlrZXdpc2UuCgkqIHNpZ25hbC5jIChzaWduYWxlbnQwLCBzaWduYWxlbnQxLCBzaWduYWxlbnQyKTogTGlrZXdpc2UuCgkobnNpZ25hbHMwLCBuc2lnbmFsczEsIG5zaWduYWxzMik6IExpa2V3aXNlLgoJKHNpZ25hbWUpOiBMSWtld2lzZS4KCSogaW9jdGwuYyAoaW9jdGxlbnQwLCBpb2N0bGVudDEsIGlvY3RsZW50Mik6IExpa2V3aXNlLgoJKG5pb2N0bGVudHMwLCBuaW9jdGxlbnRzMSwgbmlvY3RsZW50czIpOiBMaWtld2lzZS4KCShpb2N0bF9sb29rdXAsIGlvY3RsX25leHRfbWF0Y2gpOiBMaWtld2lzZS4KCSogZGVmcy5oOiBVcGRhdGUgZGVjbHMuCgkqIGlvLmMgKHN5c19pb2N0bCk6IFVwZGF0ZSB1c2Vycy4KCgkqIHV0aWwuYyAoeGxvb2t1cCwgcHJpbnR4dmFsLCBhZGRmbGFncywgcHJpbnRmbGFncyk6IFVzZSBjb25zdCBmb3IKCXN0cnVjdCB4bGF0ICogYXJndW1lbnQuCgkqIGRlZnMuaCAoeGxvb2t1cCwgcHJpbnR4dmFsLCBhZGRmbGFncywgcHJpbnRmbGFncyk6IFVwZGF0ZSBkZWNscy4KCSogYmptLmM6IEFkZCBjb25zdCB0byBhbGwgc3RydWN0IHhsYXQgZGVmbnMuCgkqIGRlc2MuYzogTGlrZXdpc2UuCgkqIGZpbGUuYzogTGlrZXdpc2UuCgkqIGlwYy5jOiBMaWtld2lzZS4KCSogbWVtLmM6IExpa2V3aXNlLgoJKiBuZXQuYzogTGlrZXdpc2UuCgkqIHByb2MuYzogTGlrZXdpc2UuCgkqIHByb2Nlc3MuYzogTGlrZXdpc2UuCgkqIHJlc291cmNlLmM6IExpa2V3aXNlLgoJKiBzaWduYWwuYzogTGlrZXdpc2UuCgkqIHNvY2suYzogTGlrZXdpc2UuCgkqIHN0cmVhbS5jOiBMaWtld2lzZS4KCSogc3lzdGVtLmM6IExpa2V3aXNlLgoJKiB0ZXJtLmM6IExpa2V3aXNlLgoJKiB0aW1lLmM6IExpa2V3aXNlLgoJKiB1dGlsLmM6IExpa2V3aXNlLgoKMjAwNC0wOS0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IEFkZCBuZXcgZW50cmllcyBmb3IgdGltZXJfKiwgY2xvY2tfKiwgYW5kCgltcV8qIHN5c2NhbGxzLCBhbmQgbmFtZXMgb25seSBmb3IgbmV3IGNhbGxzIHVwIHRvIDI1Mi4KCSogbGludXgvc3lzY2FsbGVudC5oOiBBZGQgd2FpdGlkLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHN5c193YWl0aWQuCgoJKiBwcm9jZXNzLmMgKGludGVybmFsX3dhaXQpOiBUYWtlIHNlY29uZCBhcmcgZ2l2aW5nIGluZGV4IG9mIGZsYWdzCglhcmd1bWVudC4KCSogZGVmcy5oOiBVcGRhdGUgcHJvdG90eXBlLgoJKiBzeXNjYWxsLmMgKGludGVybmFsX3N5c2NhbGwpOiBVcGRhdGUgY2FsbGVyLgoJQWxzbyB1c2UgaW50ZXJuYWxfd2FpdCBmb3IgU1lTX3dhaXRpZC4KCSogcHJvY2Vzcy5jIChzeXNfd2FpdGlkKTogRGVmaW5lIGZvciBbTElOVVhdIGFzIHdlbGwuCglEb24ndCB0d2VhayBUQ0JfU1VTUEVOREVELS1pbnRlcm5hbF93YWl0IGRvZXMgdGhhdC4KCSh3YWl0aWRfdHlwZXMpOiBDb25kaXRpb25hbGl6ZSB1c2Ugb2Ygbm9uc3RhbmRhcmQgUF8qIG1hY3Jvcy4KCjIwMDQtMDgtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjcuCgkqIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNS43LTEuCgkqIHN0cmFjZS5zcGVjOiA0LjUuNy0yLgoKCSogZGViaWFuL3J1bGVzOiBSZXdyaXRlIHNwYXJjNjQgY2hhbmdlIG9mIDIwMDQtMDctMTIuCglBbHdheXMgZG8gZWFjaCBidWlsZCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeS4KCUZpeGVzIERlYmlhbiBidWcgIzI1NDcyOC4KCgkqIHRpbWUuYyAoY2xvY2tuYW1lcyk6IFVzZSAjaWZkZWYgYXJvdW5kIENMT0NLXyogdXNlcy4KCgkqIHN0cmFjZS4xOiBTYXkgdGhhdCAtYyBzaG93cyBzeXN0ZW0gQ1BVIHRpbWUsIG5vdCByZWFsIHRpbWUuCglGaXhlcyBEZWJpYW4gYnVnICMyNTQ0MzguCgoJKiBzeXNjYWxsLmMgKGR1bXBpbyk6IE1hdGNoIHByZWFkIGFuZCBwd3JpdGUgc3lzdGVtIGNhbGxzIHRvby4KCUZpeGVzIERlYmlhbiBidWcgIzIzOTk0Ny4KCgkqIG5ldC5jIChzb2Nrb3B0aW9ucyk6IEFkZCBhbGwgU09fKiBtYWNyb3Mga25vd24gaW4gTGludXggMi42LjkuCglGaXhlcyBEZWJpYW4gYnVnICMxNzE2NTMuCgoyMDA0LTA3LTEyICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogc2lnbmFsLmMgW0xJTlVYXSAocGFyc2Vfc2lnc2V0X3QpOiBGaXggaGV4IHN0cmluZ3MgcGFyc2VyLgoJRml4ZXMgUkgjMTI4MDkxLgoKMjAwNC0wOC0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogRG9uJ3QgY2FsbCBmYWtlX2V4ZWN2ZSB1bmRlciAtYy4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMjkxNjYuCgoJKiBuZXQuYyAoc29ja2lwb3B0aW9ucyk6IEFkZCBzb21lIG9wdGlvbnMuCglbU09MX0lQVjZdIChzb2NraXB2Nm9wdGlvbnMpOiBOZXcgdmFyaWFibGUuCgkoc3lzX2dldHNvY2tvcHQsIHByaW50c29ja29wdCk6IFVzZSBpdCBmb3IgU09MX0lQVjYgbGV2ZWwuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTI4MzkxLgoKCSogdGltZS5jIChjbG9ja25hbWVzKTogTmV3IHZhcmlhYmxlLCBzeW1ib2xpYyBuYW1lcyBmb3IgY2xvY2tfdC4KCShzeXNfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX2dldHRpbWUsIHN5c19jbG9ja19uYW5vc2xlZXApOiBVc2UgaXQuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTI5Mzc4LgoKCSogc3lzdGVtLmMgKHBlcnNvbmFsaXR5X29wdGlvbnMpOiBIYXJkLWNvZGUgdmFsdWVzIGhlcmUuCglEb24ndCAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4gYXQgYWxsLgoJRml4ZXMgUkgjMTMwOTY1IGFuZCBEZWJpYW4gYnVnICM0MDU4OC4KCgkqIGZpbGUuYyAocHJpbnRfeGF0dHJfdmFsKTogTmV3IGZ1bmN0aW9uIHRvIHNob3cgYXR0cmlidXRlIHZhbHVlcy4KCShzeXNfc2V0eGF0dHIsIHN5c19mc2V0eGF0dHIsIHN5c19nZXR4YXR0ciwgc3lzX2ZnZXR4YXR0cik6IFVzZSBpdC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMzExNzcuCgoyMDA0LTA3LTEyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS42LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC41LjYtMS4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGxpbnV4L3NwYXJjNjQgZmlsZXMuCgoJKiBkZWJpYW4vcnVsZXM6IE9uIHNwYXJjLWxpbnV4LCBidWlsZCBzdHJhY2U2NCBhcyB3ZWxsLgoJRnJvbSBCZW4gQ29sbGlucyA8YmNvbGxpbnNAZGViaWFuLm9yZz4uCglGaXhlcyBEZWJpYW4gYnVnICMyNTQ3MjguCgoyMDA0LTA3LTA3ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBudXRzLmRhdmVtbG9mdC5uZXQ+CgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IFN5bmMgd2l0aCByZWFsaXR5LgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsLmggKHN5c19zZW5kZmlsZTY0LCBzeXNfZnV0ZXgsIHN5c19nZXR0aWQsCglzeXNfc2NoZWRfc2V0YWZmaW5pdHksIHN5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NldHhhdHRyLAoJc3lzX2xzZXR4YXR0ciwgc3lzX2ZzZXR4YXR0ciwgc3lzX2dldHhhdHRyLCBzeXNfbGdldHhhdHRyLAoJc3lzX2ZnZXR4YXR0ciwgc3lzX2xpc3R4YXR0ciwgc3lzX2xsaXN0eGF0dHIsIHN5c19mbGlzdHhhdHRyLAoJc3lzX3JlbW92ZXhhdHRyLCBzeXNfbHJlbW92ZXhhdHRyLCBzeXNfZnJlbW92ZXhhdHRyLAoJc3lzX3JlbWFwX2ZpbGVfcGFnZXMsIHN5c19yZWFkYWhlYWQsIHN5c190Z2tpbGwsIHN5c19zdGF0ZnM2NCwKCXN5c19mc3RhdGZzNjQsIHN5c19jbG9ja19zZXR0aW1lLCBzeXNfY2xvY2tfZ2V0dGltZSwKCXN5c19jbG9ja19nZXRyZXMsIHN5c19jbG9ja19uYW5vc2xlZXAsIHN5c190aW1lcl9jcmVhdGUsCglzeXNfdGltZXJfc2V0dGltZSwgc3lzX3RpbWVyX2dldHRpbWUpOiBOZXcgZGVjbGFyYXRpb25zLgoJKiBsaW51eC9zcGFyYzY0L2R1bW15Mi5oLCBsaW51eC9zcGFyYzY0L3N5c2NhbGxlbnQyLmgsCglsaW51eC9zcGFyYzY0L3N5c2NhbGwuaCwgbGludXgvc3BhcmM2NC9lcnJub2VudC5oLAoJbGludXgvc3BhcmM2NC9lcnJub2VudDEuaCwgbGludXgvc3BhcmM2NC9lcnJub2VudDIuaCwKCWxpbnV4L3NwYXJjNjQvaW9jdGxlbnQuaCwgbGludXgvc3BhcmM2NC9pb2N0bGVudDEuaCwKCWxpbnV4L3NwYXJjNjQvaW9jdGxlbnQyLmgsIGxpbnV4L3NwYXJjNjQvc2lnbmFsZW50LmgsCglsaW51eC9zcGFyYzY0L3NpZ25hbGVudC5oLCBsaW51eC9zcGFyYzY0L3NpZ25hbGVudC5oLAoJbGludXgvc3BhcmM2NC9zaWduYWxlbnQxLmgsIGxpbnV4L3NwYXJjNjQvc2lnbmFsZW50Mi5oLAoJbGludXgvc3BhcmM2NC9zeXNjYWxsMS5oLCBsaW51eC9zcGFyYzY0L3N5c2NhbGxlbnQuaCwKCWxpbnV4L3NwYXJjNjQvc3lzY2FsbGVudDEuaDogTmV3IGZpbGVzLgoJKiBkZWZzLmggKExJTlVYU1BBUkMpOiBEZWZpbmUgYWxzbyB3aGVuIFNQQVJDNjQuCgkoTElOVVggJiYgU1BBUkM2NCk6IFNldCBTVVBQT1JURURfUEVSU09OQUxJVElFUyB0byAzLgoJSWdub3JlIFNJR1RSQVAgYWZ0ZXIgZXhlY3ZlIGJ5IGRlZmluaW5nIFRDQl9XQUlURVhFQ1ZFLgoJRGVmaW5lIHBvc3NpYmx5IG1pc3NpbmcgX19OUl9leGl0X2dyb3VwLiAgRGVjbGFyZSBnZXRydmFsMi4KCSogY29uZmlndXJlLmFjIChzcGFyYzY0KTogTmV3IGFyY2hpdGVjdHVyZSBjYXNlLgoJKiBmaWxlLmMgKHN0YXRfc3BhcmM2NCk6IE5ldyBzdHJ1Y3R1cmUuCgkocHJpbnRzdGF0X3NwYXJjNjQpOiBOZXcgb3V0cHV0IHJvdXRpbmUgZm9yIHRoYXQuCgkocHJpbnRzdGF0KTogQ2FsbCBpdCwgaWYgcGVyc29uYWxpdHkgaXMgMi4KCShwcmludHN0YXQ2NCk6IExpa2V3aXNlLgoJKiB1dGlsLmM6IENvbmRpdGlvbmFsaXplIHB0cmFjZSBkZWZpbmVzIG9uIExJTlVYU1BBUkMKCW5vdCBMSU5VWCAmJiBTUEFSQy4KCShTUEFSQzY0ICYmIExJTlVYKTogRGVmaW5lIHJfcGMgdG8gcl90cGMsIGFuZCBQVFJBQ0VfRk9PUkVHUwoJdG8gUFRSQUNFX0ZPT1JFR1M2NCBzbyB0aGF0IG1vcmUgc3BhcmMgY29kZSBjYW4gYmUgc2hhcmVkCgliZXR3ZWVuIDY0LWJpdCBhbmQgMzItYml0LgoJKF9oYWNrX3N5c2NhbGw1KTogQ29ycmVjdCB0cmFwIG51bWJlciB3aGVuIFNQQVJDNjQuCgkoUFRSQUNFX1dSSVRFe1RFWFQsREFUQX0pOiBBZGQgU1BBUkM2NCB0byBpZmRlZiBndWFyZC4KCShnZXRwYyk6IEhhbmRsZSBTUEFSQzY0ICYmIExJTlVYLgoJKHByaW50Y2FsbCk6IExpa2V3aXNlLgoJKGFyZyBmZXRjaGluZy9zZXR0aW5nKTogVXNlIHNhbWUgY29kZSBmb3IgU1BBUkM2NCBMSU5VWAoJYXMgZm9yIFNQQVJDLgoJKHNldGJwdCk6IEhhbmRsZSBTUEFSQzY0ICYmIExJTlVYLgoJKGNsZWFyYnB0KTogTGlrZXdpc2UuCgkqIHNpZ25hbC5jOiBDb25kaXRpb25hbGl6ZSBwdHJhY2UgZGVmaW5lcyBvbiBTUEFSQyBhbmQKCVNQQVJDNjQuCgkoU1BBUkM2NCAmJiBMSU5VWCk6IERlZmluZSByX3BjIHRvIHJfdHBjLCBhbmQgUFRSQUNFX0ZPT1JFR1MKCXRvIFBUUkFDRV9GT09SRUdTNjQgc28gdGhhdCBtb3JlIHNwYXJjIGNvZGUgY2FuIGJlIHNoYXJlZAoJYmV0d2VlbiA2NC1iaXQgYW5kIDMyLWJpdC4KCShtX3NpZ2luZm8pOiBVc2Ugc2FtZSBkZWZpbml0aW9uIG9uIFNQQVJDNjQgYXMgU1BBUkMuCgkoc3lzX3NpZ3JldHVybik6IEhhbmRsZSBMSU5VWCAmJiBTUEFSQzY0LgoJKiBzeXNjYWxsLmM6IENvbmRpdGlvbmFsaXplIHB0cmFjZSBkZWZpbmVzIG9uIFNQQVJDIGFuZAoJU1BBUkM2NC4KCShTUEFSQzY0ICYmIExJTlVYKTogRGVmaW5lIHJfcGMgdG8gcl90cGMsIGFuZCBQVFJBQ0VfRk9PUkVHUwoJdG8gUFRSQUNFX0ZPT1JFR1M2NCBzbyB0aGF0IG1vcmUgc3BhcmMgY29kZSBjYW4gYmUgc2hhcmVkCgliZXR3ZWVuIDY0LWJpdCBhbmQgMzItYml0LgoJKGdldHNjbm8pOiBVc2Ugc2FtZSBzdGF0aWMgc3RhdGUgb24gU1BBUkM2NCBhcyBTUEFSQywKCWFuZCBhZGQgU1BBUkM2NCBoYW5kbGluZy4KCShnZXRfZXJyb3IpOiBIYW5kbGUgTElOVVggJiYgU1BBUkM2NC4KCShmb3JjZV9yZXN1bHQpOiBMaWtld2lzZS4KCShzeXNjYWxsX2VudGVyKTogTGlrZXdpc2UuCgkodHJhY2Vfc3lzY2FsbCk6IEhhbmRsZSBzeXNfc29ja2V0Y2FsbCBhbmQgc3lzX2lwYyBvbiBTUEFSQzY0CglqdXN0IGxpa2UgU1BBUkMuCgkoZ2V0cnZhbDIpOiBIYW5kbGUgTElOVVggJiYgU1BBUkM2NC4KCSogcHJvY2Vzcy5jOiBDb25kaXRpb25hbGl6ZSBwdHJhY2UgZGVmaW5lcyBvbiBTUEFSQyBhbmQKCVNQQVJDNjQuCgkoU1BBUkM2NCAmJiBMSU5VWCk6IERlZmluZSByX3BjIHRvIHJfdHBjLCBhbmQgUFRSQUNFX0ZPT1JFR1MKCXRvIFBUUkFDRV9GT09SRUdTNjQgc28gdGhhdCBtb3JlIHNwYXJjIGNvZGUgY2FuIGJlIHNoYXJlZAoJYmV0d2VlbiA2NC1iaXQgYW5kIDMyLWJpdC4KCShjaGFuZ2Vfc3lzY2FsbCk6IEhhbmRsZSBMSU5VWCAmJiBTUEFSQzY0LgoJKHN0cnVjdF91c2VyX29mZnNldHMpOiBJZmRlZiBvdXQgdGhvc2Ugd2hpY2ggZG8gbm90IGV4aXN0CglvbiBTUEFSQzY0LgoJKiBuZXQuYyAoc3lzX3BpcGUpOiBIYW5kbGUgTElOVVggJiYgU1BBUkM2NC4KCSogaW9jdGwuYzogRml4IGluaXRpYWxpemVyIHR5cG8gZm9yIG5pb2N0bGVudHMyLCB3YXMKCW5pb2N0bGVudHMxIGJ5IGFjY2lkZW50LgoKMjAwNC0wNi0yOCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfZXhlYyk6IE1vdmUgVENCX1dBSVRFWEVDVkUgaGFuZGxpbmcgaGVyZS4KCShzeXNfZXhlY3ZlKTogUmVtb3ZlIGl0IGhlcmUuCgoyMDA0LTA3LTEyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbGludXgvc2g2NC9zeXNjYWxsZW50LmguCgoJKiBkZWJpYW4vY29udHJvbCAoU2VjdGlvbik6IE1vdmUgdG8gdXRpbHMsIG1hdGNoaW5nIERlYmlhbiBvdmVycmlkZS4KCgkqIG5ldC5jIChhZGRyZmFtcyk6IE1ha2UgdmFyaWFibGUgZ2xvYmFsLgoJKiBzb2NrLmMgKHNvY2tfaW9jdGwpOiBEZWNvZGUgdGhlIGFyZ3VtZW50cyBmb3IgU0lPQ0dJRk5BTUUsCglTSU9DR0lGSU5ERVgsIGFuZCBTSU9DR0lGQ09ORi4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMjY5MTcuCgoJKiBsaW51eC9pb2N0bHNvcnQuYzogQWRkIHNvbWUgI2luY2x1ZGVzLgoJW1BPV0VSUENdOiBLbHVkZ2Ugb3V0IGhpZ2ggYml0cy4KCSogbGludXgvaWE2NC9pb2N0bGVudC5oOiBSZWdlbmVyYXRlZCB1c2luZyBSSEVMMyBoZWFkZXJzLgoJKiBsaW51eC9wb3dlcnBjL2lvY3RsZW50Lmg6IExpa2V3aXNlLgoKMjAwNC0wNy0xMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBSZXBsYWNlIGFzbSB3aXRoICRhc20gaW4gYWxsIHBsYWNlcy4KCgkqIGNvbmZpZ3VyZS5hYzogQWRkIEkzODYgYXMgQU1fQ09ORElUSU9OQUwuCgkqIE1ha2VmaWxlLmFtIFtMSU5VWF06IEFkZCBtYWludGFpbmVyLW1vZGUgcnVsZXMgdG8gcmVnZW5lcmF0ZQoJdGhlIGlvY3RsZW50LmggZmlsZS4KCjIwMDQtMDctMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiByZXNvdXJjZS5jIChzeXNfcXVvdGFjdGwpOiBUcnVuY2F0ZSBmaXJzdCBhcmd1bWVudCB0byAzMiBiaXRzLCBzaW5jZQoJdGhhdCdzIHdoYXQgdGhlIGtlcm5lbCB3aWxsIGRvLgoKMjAwNC0wNy0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBUYWtlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byB1c2UgYXMgZGlyZWN0b3J5CgluYW1lIGluIHBsYWNlIG9mIGBhc20nLgoKMjAwNC0wNi0yNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjUuNS4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNS41LTEuCgoyMDA0LTA2LTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3lzY2FsbC5jIChzeXNjYWxsX2ZpeHVwKSBbTElOVVggJiYgWDg2XzY0XTogRm9yIDMyLWJpdCBwcm9jZXNzLAoJc2lnbiBleHRlbmQgdGhlIGxvdyAzMiBiaXRzIG9mIFJBWCB0byA2NCBiaXRzLgoJRml4ZXMgUkgjMTI2NTQ3LgoKCSogc3lzY2FsbC5jIChmb3JjZV9yZXN1bHQpOiBbTElOVVggJiYgWDg2XzY0XTogRml4IFJBWCo0IC0+IFJBWCo4LgoKMjAwNC0wNi0wMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjUuNC4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNS40LTEuCgoJKiBuZXQuYyAoZG9tYWlucyk6IEFkZCBtYW55IFBGXyogdmFsdWVzICNpZmRlZiBQRl8qLgoJKGFkZHJmYW1zKTogQWRkIG1hbnkgQUZfKiB2YWx1ZXMgI2lmZGVmIEFGXyouCglGaXhlcyBEZWJpYW4gYnVnICMyNTA1MDYuCgoyMDA0LTA1LTAyICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogbGludXgvaW9jdGxzb3J0LmMgKGNvbXBhcmUpOiBXaGVuIGlvY3RsIGNvZGVzIGVxdWFsLCBjb21wYXJlCgluYW1lcy4KCShtYWluKTogUHJpbnQgYSBub3RlIHRoYXQgcHJvZ3JhbSBvdXRwdXQgaXMgZ2VuZXJhdGVkIGJ5Cglpb2N0bHNvcnQuCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBCdWlsZCB0aGUgbGlzdCBvZiBpb2N0bHMgZGVmaW5lZCBpbgoJbGludXgvZmIuaCAoMHg0Ni4uKSwgbGludXgva2QuaCAoMHg0Qi4uKSwgbGludXgvY2Ryb20uaCAoMHg1My4uKSwKCWFzbS9pb2N0bHMuaCAoMHg1NC4uKSwgbGludXgvdnQuaCAoMHg1Ni4uKSwgbGludXgvdmlkZW90ZXh0LmgKCSgweDcxLi4pLCBsaW51eC92aWRlb3RleHQuaCAoMHg3Mi4uKSwgYXNtL3NvY2tpb3MuaCAoMHg4OS4uKSwKCWxpbnV4L3NvY2tpb3MuaCAoMHg4OS4uKSwgbGludXgvd2lyZWxlc3MuaCAoMHg4Qi4uKS4KCSogbGludXgvaW9jdGxlbnQuaDogUmVnZW5lcmF0ZWQgZnJvbSBsaW51eC0yLjYuNS4KCUZpeGVzIFJIIzEyMjI1Ny4KCjIwMDQtMDYtMDMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWJpYW4vY29udHJvbCAoQXJjaGl0ZWN0dXJlKTogQWRkIGFtZDY0LgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjQ2NTY4LgoKCSogc3RyYWNlLmMgKG1haW4pIFtMSU5VWF06IEV4cGFuZCBUQ0JUQUIgYXMgbmVjZXNzYXJ5IGZvciB0aHJlYWRzCglhdHRhY2hlZC4gIEF0dGFjaCB0aHJlYWRzIG9ubHkgdW5kZXIgLWYuICBTZXQgVENCX0ZPTExPV0ZPUksgaW4gdGhlbS4KCShleHBhbmRfdGNidGFiKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIC4uLgoJKiBwcm9jZXNzLmMgKGZvcmtfdGNiKTogLi4uIGhlcmUsIGNhbGwgdGhhdC4KCSogZGVmcy5oOiBEZWNsYXJlIGV4cGFuZF90Y2J0YWIuCgoyMDA0LTA0LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogcHJvY2Vzcy5jIChwcmludHN0YXR1cyk6IEFkZCBhIHNwYWNlIGJlZm9yZSB8IGluIG91dHB1dC4KCjIwMDQtMDQtMTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWM6IFZlcnNpb24gNC41LjMuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjUuMy0xLgoKMjAwNC0wMy0xOCAgRG1pdHJ5IFYuIExldmluICA8bGR2QGFsdGxpbnV4Lm9yZz4KCgkqIHJlc291cmNlLmMgKHN5c19xdW90YWN0bCkgW0xJTlVYXTogQ2FzdCBhcml0aG1ldGljIHNoaWZ0IG9wZXJhbmQKCWZyb20gbG9uZyB0byB1bnNpZ25lZCBsb25nLCB0byBmaXggb3V0cHV0IG9mIHRoZSBxdW90YWN0bCBjb21tYW5kCglwYXJzZXIuCglGaXhlcyBSSCMxMTg2OTQuCgoyMDA0LTA0LTE2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvczM5MC9pb2N0bGVudC5oLCBsaW51eC9zMzkweC9pb2N0bGVudC5oOiBVcGRhdGUgREFTRCBpb2N0bHMuCglGcm9tIE1heGltIFNoY2hldHluaW4gPG1heGltQGRlLmlibS5jb20+LgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgPG1xdWV1ZS5oPi4KCSogaXBjLmMgKHN5c19tcV9vcGVuLCBwcmludG1xYXR0cikgWyEgSEFWRV9NUVVFVUVfSF06IERvbid0IHRyeSB0bwoJZGVjb2RlIHN0cnVjdCBtcV9hdHRyLgoJKiBORVdTOiBNZW50aW9uIG1xIHN1cHBvcnQuCgoJKiBsaW51eC9zeXNjYWxsLmg6IFN1cHBvcnQgbmV3IG1xXyogc3lzY2FsbHMgb24gTGludXguCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2R1bW15Lmg6IExpa2V3aXNlLgoJKiBpcGMuYzogTGlrZXdpc2UuCgkqIHRpbWUuYyAocHJpbnRzaWdldmVudCk6IEhhbmRsZSBTSUdFVl9USFJFQUQuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTIwNzAxLgoKMjAwNC0wNC0xMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIG5ldC5jIChtc2dfZmxhZ3MpOiBHcm9rIE1TR19GSVgsIE1TR19TWU4sIE1TR19SU1QsIE1TR19OT1NJR05BTCwKCU1TR19NT1JFLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzEyMDU0MS4KCgkqIHByb2Nlc3MuYyAocHJpbnRzdGF0dXMpOiBNYXNrIG91dCBiaXRzIHByZXNlbnRlZCBzeW1ib2xpY2FsbHksIGFuZAoJcHJpbnQgInwgMHhubm4iIGlmIHRoZSByZW1haW5pbmcgYml0cyBhcmUgbm90IGFsbCB6ZXJvLgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjQwMDYyLgoKCSogcHJvY2Vzcy5jIChwcmludF9hZmZpbml0eWxpc3QpOiBSZXdyaXR0ZW4gdG8gaGFuZGxlIGluZGlyZWN0IHZhbHVlcy4KCShzeXNfc2NoZWRfc2V0YWZmaW5pdHksIHN5c19zY2hlZF9nZXRhZmZpbml0eSk6IFVwZGF0ZSBjYWxsZXJzLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzExODY4NS4KCgkqIGFjaW5jbHVkZS5tNDogUXVvdGUgZmlyc3QgYXJndW1lbnQgdG8gQUNfREVGVU4gaW4gYWxsIGNhc2VzLgoKMjAwNC0wNC0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKSBbTElOVVhdOiBXaGVuIGF0dGFjaGluZyBmb3IgLXAsIGxvb2sgaW4KCS9wcm9jL1BJRC90YXNrIGZvciBhbGwgdGhyZWFkcyBhbmQgYXR0YWNoIHRoZW0gYXMgcHJlc3VtZWQKCUNMT05FX1RIUkVBRCBjaGlsZHJlbi4KCSogTkVXUzogTWVudGlvbiB0aGUgZmVhdHVyZS4KCUZpeGVzIFJIIzEyMDQ2Mi4KCjIwMDQtMDMtMDIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiB1dGlsLmMgKHNldGJwdCk6IEZpeCBvbmUgbWlzc2VkIHNwb3QgdG8gdXNlIG5ldyBhcmcwX2luZGV4IG1hY3JvLgoJRnJvbSBNaWNoYWVsIEhvbHpoZXUgPEhPTFpIRVVAZGUuaWJtLmNvbT4uCgoJKiBkZWJpYW4vY29udHJvbCAoU3RhbmRhcmRzLVZlcnNpb24pOiBVcGRhdGUgdG8gMy42LjEuCgoyMDA0LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS4yLgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC41LjItMS4KCgkqIHN0cmFjZS5jIChtYWluKTogQXZvaWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBmcm9tIGx1ZGljcm91cwoJYXJndW1lbnRzIG9yIFBBVEggdmFsdWVzLgoJKiBzeXNjYWxsLmMgKHF1YWxfc2lnbmFsKTogQmFpbCBvdXQgZm9yIHRvby1sb25nIHN0cmluZy4KCgkqIG1lbS5jIFtMSU5VWF06IDxhc20vbW1hbi5oPiAtPiA8bGludXgvbW1hbi5oPgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjIzMjA3LgoKCSogbGludXgvc3BhcmMvc3lzY2FsbC5oOiBDb3B5IGxpbnV4L3N5c2NhbGwuaCBkZWNscyBvZiBzeXNfc2NoZWRfKi4KCgkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGBzdHJ1Y3QgdXNlcl9kZXNjJyBpbiA8YXNtL2xkdC5oPi4KCSogcHJvY2Vzcy5jIFtIQVZFX1NUUlVDVF9VU0VSX0RFU0NdOiBVc2Ugc3RydWN0IHVzZXJfZGVzYyBpbiBwbGFjZSBvZgoJc3RydWN0IG1vZGlmeV9sZHRfbGR0X3MuCgkqIG1lbS5jIFtIQVZFX1NUUlVDVF9VU0VSX0RFU0NdOiBMaWtld2lzZS4KCgkqIHN5c3RlbS5jIChzeXNjdGxfdm0pOiBDb25kaXRpb25hbGl6ZSBWTV8qIG1hY3JvIHVzZXMsIGFkZCBzb21lIG1vcmUuCglGcm9tIFRpbSBZYW1pbiA8cGxhc21hcm9vQGdlbnRvby5vcmc+LgoKCSogcHJvY2Vzcy5jIChzeXNfZXhlY3ZlKTogQ2xlYXIgaW5zdGVhZCBvZiBzZXQgVENCX1dBSVRFWEVDVkUgb24KCWVycmluZyBzeXNjYWxsLgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgYHN0cnVjdCBwdF9hbGxfdXNlcl9yZWdzJwoJYW5kIGBzdHJ1Y3QgaWE2NF9mcHJlZycgaW4gPHN5cy9wdHJhY2UuaD4uCgkqIHV0aWwuYywgcHJvY2Vzcy5jLCBzeXNjYWxsLmMsIHNpZ25hbC5jOiBXb3JrIGFyb3VuZCBjb25mbGljdHMgYmV0d2VlbgoJPHN5cy9wdHJhY2UuaD4gYW5kIDxsaW51eC9wdHJhY2UuaD4gZm9yIGRlZmluaW5nIHRob3NlIHR5cGVzLgoKCSogcHJvY2Vzcy5jIChzdHJ1Y3RfdXNlcl9vZmZzZXRzKSBbTElOVVggJiYgSUE2NF06IENvbmRpdGlvbmFsaXplCglQVF9BUl9DU0QgYW5kIFBUX0FSX1NTRCB1c2VzIGluIGNhc2Ugb2Ygb2xkZXIga2VybmVsIGhlYWRlcnMuCgoJKiB1dGlsLmMgW0xJTlVYXSAoYXJnMF9pbmRleCwgYXJnMV9pbmRleCk6IE5ldyBtYWNyb3MuCglbUzM5MCB8fCBTMzkwWF06IERlZmluZSB0aGVtIHdpdGggaW52ZXJ0ZWQgdmFsdWVzLgoJKHNldGJwdCk6IFVzZSB0aGVtIGZvciB1X2FyZyBpbmRpY2VzLgoKMjAwNC0wMi0yNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIGRlZnMuaCBbTElOVVggJiYgSUE2NF06IERlY2xhcmUgZ2V0cnZhbDIgYWxzbyBvbiBJQTY0LgoJKiBuZXQuYyAoc3lzX3BpcGUpIFtMSU5VWCAmJiBJQTY0XTogRm9yIElBNjQgdXNlIHRoZSB0d28gcmV0dXJuIHZhbHVlcy4KCSogc3lzY2FsbC5jIChnZXRydmFsMikgW0xJTlVYICYmIElBNjRdOiBJbXBsZW1lbnQgZm9yIElBNjQuCgoyMDA0LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvZHVtbXkuaCAoc3lzX3NjaGVkX2dldHNjaGVkdWxlciwgc3lzX3NjaGVkX3NldHBhcmFtLAoJc3lzX3NjaGVkX2dldHBhcmFtLCBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyLAoJc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluKTogUmVtb3ZlIG1hY3Jvcy4KCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19zY2hlZF9nZXRzY2hlZHVsZXIsIHN5c19zY2hlZF9zZXRwYXJhbSwKCXN5c19zY2hlZF9nZXRwYXJhbSwgc3lzX3NjaGVkX3NldHNjaGVkdWxlciwgc3lzX3NjaGVkX2dldHNjaGVkdWxlciwKCXN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluKTogTmV3IGZ1bmN0aW9ucy4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMTY5OTAuCgoyMDA0LTAyLTIwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IFVwZGF0ZSBzb21lIHN5c2NhbGxzLgoJRnJvbSBSYW5kb2xwaCBDaHVuZyA8dGF1c3FAZGViaWFuLm9yZz4uCglGaXhlcyBEZWJpYW4gYnVnICMyMzE2MzIuCgoyMDAzLTEyLTMxICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfZXhpdCk6IEZvciBpYTY0LCBhbHNvIHJlY29nbml6ZSBJQS0zMiAyNTIKCWFzIGV4aXRfZ3JvdXAoKS4KCShjaGFuZ2Vfc3lzY2FsbCk6IEZvciBJQTY0LCBhbHNvIHN1cHBvcnQgY2hhbmdpbmcgSUEtMzIgc3lzY2FsbHMuCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEZvciBJQTY0LCBhbHNvIHJlY29nbml6ZSBJQS0zMgogICAgICAgIHN5c2NhbGwgMjUyIChleGl0X2dyb3VwKSBhcyBhbiBpbnRlcm5hbF9leGl0KCkgc3lzY2FsbC4KCSogdXRpbC5jIChTWVNfZm9yayk6IEZvciBJQTY0LCBkZWZpbmUgdGhlbSB0byB0aGUgSUEtMzIgc3lzY2FsbAoJbnVtYmVyLgoJKFNZU192Zm9yayk6IExpa2V3aXNlLgoJKGFyZ19zZXR1cCk6IEZvciBJQTY0IHZlcnNpb24sIGFsc28gc3VwcG9ydCBJQS0zMiBzeXNjYWxscy4KCShnZXRfYXJnMCk6IExpa2V3aXNlLgoJKGdldF9hcmcxKTogTGlrZXdpc2UuCgkoc2V0X2FyZzApOiBMaWtld2lzZS4KCShzZXRfYXJnMSk6IExpa2V3aXNlLgoKMjAwNC0wMi0xNSAgQW50b24gQmxhbmNoYXJkICA8YW50b25Ac2FtYmEub3JnPgoKCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IEFkZCBydGFzIGNhbGwuCglTaGlmdCBtdWx0aXBsZXhlZCBzeXNjYWxscyB0byBzdGFydCBhdCAzMDAsIHdlIGFyZSBhbHJlYWR5IGFib3V0Cgl0byBoaXQgMjU2IHJlYWwgc3lzY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGwuaDogU1lTX3NvY2tldF9zdWJjYWxsIGlzIG5vdyAzMDAgZm9yIFtQT1dFUlBDXS4KCjIwMDQtMDItMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuYyAobWFpbik6IFVzZSBUQ1AtPnBpZCwgbm90IFBJRCwgaW4gLXAgbWVzc2FnZS4KCUZpeGVzIERlYmlhbiBidWcgIzIyOTgwMi4KCjIwMDQtMDEtMTMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKGZvcmNlX3Jlc3VsdCkgW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF06IFJlbW92ZSBib2d1cyB1cGVlawoJY2FsbC4KCgkqIHN0cmVhbS5jIChpbnRlcm5hbF9zdHJlYW1faW9jdGwpOiBGaXggdHlwbyBzdHJpY3QgLT4gc3RydWN0LgoJUmVwb3J0ZWQgYnkgUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUBodW5ncnkuY29tPi4KCjIwMDMtMTItMzEgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogcHJvY2Vzcy5jIChzdHJ1Y3RfdXNlcl9vZmZzZXRzKSBbSUE2NF06IEZpeCB1cCByZWdpc3RlciBuYW1lIGxpc3QuCgoyMDAzLTEyLTE0ICBBbnRvbiBCbGFuY2hhcmQgIDxhbnRvbkBzYW1iYS5vcmc+CgoJKiBmaWxlLmMgKHN5c19nZXRkZW50czY0KTogRG9uJ3QgY2FzdCBkX2lubyBhbmQgZF9vZmYgdG8gdW5zaWduZWQgbG9uZy4KCVVzZSAlbGx1IGZvcm1hdHMgZm9yIHRoZW0uCgoJKiBmaWxlLmMgW0xJTlVYXSAoZnNtYWdpYyk6IEFkZCBTWVNGU19NQUdJQy4KCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBVcGRhdGUgdG8gaW5jbHVkZSByZWNlbnRseSBhZGRlZAoJc3lzY2FsbHMuCgoJKiBzeXNjYWxsLmMgKGdldF9lcnJvcikgW1BPV0VSUENdOiBDYXN0IHJlc3VsdCB0byB1bnNpZ25lZCBsb25nIGZvcgoJcHBjNjQsIHdlIHdlcmUgbWlzcmVwb3J0aW5nIHN5c2NhbGxzIHRoYXQgcmVhbGx5IHN1Y2NlZWRlZCBhcyBoYXZpbmcKCWZhaWxlZC4KCjIwMDQtMDEtMTMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuMTogUmVtb3ZlIGNvbW1lbnQgYWJvdXQgdmZvcmsgb24gTGludXguCglGaXhlcyBEZWJpYW4gYnVnICMyMjMzOTAuCgoJKiBmaWxlLmMgKGRpcmVudHR5cGVzKTogRGVmaW5lIHVuZGVyIFtMSU5VWF0gYXMgd2VsbC4gIEFkZCBEVF9VTktOT1dOLgoJKHN5c19nZXRkZW50czY0KSBbTElOVVhdOiBQcmludCBkX3R5cGUgZmllbGQuCgoyMDAzLTEyLTE1ICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogc3RyYWNlLmMgKHRyYWNlKSBbV0NPUkVEVU1QXTogU2hvdyBjb3JlZHVtcCBzdGF0dXMgb2YgdGhlCglraWxsZWQgcHJvY2VzcyBpZiBhdmFpbGFibGUuICBGaXhlcyBSSCMxMTIxMTcuCgoyMDAzLTExLTEzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS4xLgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC41LjEtMS4KCjIwMDMtMDktMDYgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBkZWZzLmggKGlvY3RsX2xvb2t1cCk6IFByb3RvdHlwZSBjaGFuZ2UuCgkqIGlvY3RsLmMgKGlvY3RsX25leHRfbWF0Y2gpOiBOZXcgZnVuY3Rpb24uCgkqIGRlZnMuaDogRGVjbGFyZSBpdC4KCSogaW8uYyAoc3lzX2lvY3RsKTogVXNlIGl0LCB0byBkaXNwbGF5IGFsbCBwb3NzaWJsZSBpb2N0bCBuYW1lcwoJd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgbWF0Y2guCgkqIGlvY3RsLmMgKGlvY3RsX2xvb2t1cCk6IExpa2V3aXNlLgoJKiBzdHJlYW0uYyAoaW50ZXJuYWxfc3RyZWFtX2lvY3RsKTogTGlrZXdpc2UuCglQYXRjaCBmcm9tIFNvbGFyIERlc2lnbmVyIDxzb2xhckBvcGVud2FsbC5jb20+LgoKMjAwMy0xMS0xMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3NoL3N5c2NhbGxlbnQuaDogVXNlIHN5c19zZXRncm91cHMzMiwgc3lzX2dldGdyb3VwczMyLgoJKiBsaW51eC9zaDY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoyMDAzLTA5LTA2ICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCUZpeGVzIGZvciBSSCMxMDUzNTkuCgkqIHV0aWwuYyAocHJpbnR1aWQpOiBOZXcgZnVuY3Rpb24uCgkqIGRlZnMuaDogRGVjbGFyZSBpdC4KCSogZmlsZS5jIChzeXNfY2hvd24pOiBVc2UgaXQuCgkqIGZpbGUuYyAoc3lzX2ZjaG93bik6IExpa2V3aXNlLgoJKiBwcm9jZXNzLmMgKHN5c19zZXRyZXVpZCwgc3lzX3NldHJlZ2lkLCBzeXNfc2V0cmVzdWlkLAoJc3lzX3NldHJlc2dpZCk6IExpa2V3aXNlLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEJldHRlciBoYW5kbGUgZ2V0Z2lkMzIsIGdldGV1aWQzMiwgZ2V0ZWdpZDMyLAoJc2V0cmV1aWQzMiwgc2V0cmVnaWQzMiwgZ2V0Z3JvdXBzMzIsIHNldGdyb3VwczMyLCBmY2hvd24zMiwKCXNldHJlc3VpZDMyLCBnZXRyZXN1aWQzMiwgc2V0cmVzZ2lkMzIsIGdldHJlc2dpZDMyLCBjaG93bjMyLAoJc2V0dWlkMzIsIHNldGdpZDMyLCBzZXRmc3VpZDMyLCBzZXRmc2dpZDMyLgoJKiBwcm9jZXNzLmMgW0xJTlVYXTogRGVmaW5lIEdFVEdST1VQUzMyX1QuCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfc2V0Z3JvdXBzMzIsIHN5c19nZXRncm91cHMzMik6CglOZXcgZnVuY3Rpb25zLgoJKiBsaW51eC9zeXNjYWxsLmggKHN5c19zZXRncm91cHMzMiwgc3lzX2dldGdyb3VwczMyKToKCURlY2xhcmUgdGhlbS4KCjIwMDMtMTEtMTEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuYyAobWFpbik6IEJhaWwgd2l0aCB1c2FnZSBlcnJvciBmb3IgbWlzc2luZyBjb21tYW5kIGJlZm9yZSB3ZQoJb3BlbiB0aGUgLW8gZmlsZSBvciBmaWRkbGUgdWlkcy4KCjIwMDMtMTEtMDYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuYyAobWFpbik6IFRyZWF0IHBpcGVkIG91dHB1dCBtb3JlIGxpa2UgZmlsZSBvdXRwdXQuCglEaXNhbGxvdyAtZmYgd2l0aCBwaXBlZCBvdXRwdXQuICBGaXhlcyBSSCMxMDUzNjYuCglSZXBvcnRlZCBieSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBzdHJhY2UuYyAodHByaW50Zik6IENoZWNrIHJlc3VsdCBvZiB2ZnByaW50ZiBhbmQgdXNlIHBlcnJvciB3aGVuIGl0CglmYWlscyB3aGlsZSBub3Qgd3JpdGluZyB0byBzdGRlcnIgaXRzZWxmLiAgRml4ZXMgRGViaWFuIGJ1ZyAjMjE4NzYyLgoKCSogbmV0LmMgKHByaW50c29jayk6IEZpeCB0eXBvIGluICNpZmRlZiBBRl9ORVRMSU5LLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDMtMTEtMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKHRyYWNlX3N5c2NhbGwpIFtMSU5VWF06IENhbGN1bGF0ZSBPTkVfVElDSyBvbmNlIHVzaW5nCglzZXRpdGltZXIgcmF0aGVyIHRoYW4gaGFyZC1jb2RpbmcgYSB2YWx1ZSBiYXNlZCBvbiBIWi4KCUZpeGVzIFJIIzEwODAxMiwgcmVwb3J0ZWQgYnkgRmxvcmlhbiBMYSBSb2NoZSA8bGFyb2NoZUByZWRoYXQuY29tPi4KCjIwMDMtMTAtMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuMTogRml4ZWQgYSBmZXcgc3BlbGxpbmcgZXJyb3JzLgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjE3MDA4LgoKCSogc3lzY2FsbC5jOiBSZXZlcnQgbGFzdCBjaGFuZ2UsIHdhcyBicm9rZW4uCgoyMDAzLTEwLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSk6IERvbid0IHN1c3BlbmQgcGFyZW50IHdoZW4gY2FsbCByZXF1ZXN0ZWQKCWEgc3BlY2lmaWMgUElEIHRoYXQgaXMgbm90IGEgdHJhY2VkIGNoaWxkLgoKCSogc2lnbmFsLmMgW0xJTlVYXSAocGFyc2Vfc2lnc2V0X3QpOiBSZXdyaXRlIHRvIHByb2Nlc3MgaGV4IHN0cmluZ3MKCWZyb20gcmlnaHQgdG8gbGVmdCBzbyB3ZSBkb24ndCBoYXZlIHRvIHByZXN1bWUgdGhlIHNpemUuCglSZXBvcnRlZCBieSBEYXZpZCBXb29kaG91c2UgPGR3bXcyQHJlZGhhdC5jb20+LgoKMjAwMy0wOS0yNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIG1lbS5jIChtbWFwX3Byb3QpIFtQUk9UX1NFTSwgUFJPVF9HUk9XU0RPV04sIFBST1RfR1JPV1NVUF06IEluY2x1ZGUKCXRoZXNlIGluIHRoZSB0YWJsZSBpZiB0aGV5IGFyZSBkZWZpbmVkLgoKMjAwMy0wOS0yNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjUuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjUtMS4KCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pIFtMSU5VWF0gW1MzOTAgfHwgUzM5MFhdOiBCYWlsIG91dCBvZgoJaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYnJhbmNoIGlmIFRDQl9JTlNZU0NBTEwgaXMgY2xlYXIuCglSZXBvcnRlZCBieSA8am9jaGVuQHBlbmd1aW4tYnJlZWRlci5vcmc+LgoKCSogbGludXgvaW9jdGxlbnQuaDogU3dhcCBvcmRlciBvZiBvdmVybG9hZGVkIFRDKiBhbmQgU05EQ1RMXyogdmFsdWVzLgoKMjAwMy0wOS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5zcGVjOiBPbiBwcGM2NCAobWF5YmUgb3RoZXJzIGxhdGVyKSwgY3JlYXRlIGFuIHN0cmFjZTY0CglwYWNrYWdlIGFzIHdlbGwgY29udGFpbmluZyBqdXN0IC91c3IvYmluL3N0cmFjZTY0LgoKCSogc2lnbmFsLmMgKHNwcmludHNpZ21hc2spOiBQcmludCBSVF8ldSBmb3IgX19TSUdSVE1JTi4uX19TSUdSVE1BWC4KCUZpeGVzIFJIIzEwNDM2NS4KCjIwMDMtMDgtMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEZpeCBtbG9jayBhcmd1bWVudCBjb3VudC4gIEZpeGVzIFJIIzEwMTQ5OS4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MHgvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCjIwMDMtMDctMjggIERhbmllbCBKYWNvYm93aXR6ICA8ZHJvd0BtdmlzdGEuY29tPgoKCSogZGVmcy5oIChBTElHTjY0KTogRGVmaW5lIGZvciBNSVBTLgoJKiBpby5jIChQUkVBRF9PRkZTRVRfQVJHKTogRGVmaW5lLgoJKHN5c19wcmVhZCwgc3lzX3B3cml0ZSk6IFVzZSBpdC4KCSogcHJvY2Vzcy5jIChzdHJ1Y3RfdXNlcl9vZmZzZXRzKSBbU0hdOiBDaGVjayB3aGV0aGVyIFJFR19YRFJFRzAKCWlzIGRlZmluZWQuCgkqIGxpbnV4L3NoL3N5c2NhbGxlbnQuaCAocHJlYWQsIHB3cml0ZSk6IFRha2Ugc2l4IGFyZ3VtZW50cy4KCSh0cnVuY2F0ZTY0LCBmdHJ1bmNhdGU2NCk6IFByZXR0eS1wcmludC4KCSogbGludXgvbWlwcy9zeXNjYWxsZW50LmggKHByZWFkLCBwd3JpdGUpOiBUYWtlIHNpeCBhcmd1bWVudHMuCgkodHJ1bmNhdGU2NCwgZnRydW5jYXRlNjQpOiBUYWtlIGZvdXIgYXJndW1lbnRzLgoKMjAwMy0wNy0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTkuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTktMS4KCjIwMDMtMDctMTUgIEFudG9uIEJsYW5jaGFyZCAgPGFudG9uQHNhbWJhLm9yZz4KCgkqIGlwYy5jOiBBZGQgU0hNX0hVR0VUTEIgZmllbGQuCglNYXNrIG91dCBwZXJtaXNzaW9uIGJpdHMgaW4gbXNnZ2V0LCBzZW1nZXQgYW5kIHNobWdldCBiZWZvcmUKCQlwcmludGluZyByZXNvdXJjZV9mbGFncy4KCU1hc2sgZXhlY3V0ZSBwZXJtaXNzaW9uIGJpdHMgKGV2ZW4gdGhvdWdoIHdlIGRvbnQgY3VycmVudGx5CgkJdXNlIHRoZW0pLgoKMjAwMy0wNy0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oICh0Z2tpbGwpOiBOZXcgYXQgMjUwLgoKCSogbGludXgvc3lzY2FsbGVudC5oOiB0cnVuY2F0ZTY0L2Z0cnVuY2F0ZTY0IG5lZWQgMyBhcmdzLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogSGFuZGxlIHN0YXRmczY0LCBmc3RhdGZzNjQsIHV0aW1lcy4KCSogZmlsZS5jIChwcmludHN0YXRmcyk6IFByaW50IGZfZnNpZCBhbmQgZl9mcnNpemUuCglbTElOVVhdIChwcmludHN0YXRmczY0LCBzeXNfc3RhdGZzNjQsIHN5c19mc3RhdGZzNjQpOiBOZXcgZnVuY3Rpb25zLgoJKiBsaW51eC9zeXNjYWxsLmg6IEFkZCBkZWNscy4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoyMDAzLTA3LTA5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50LmggKHRna2lsbCk6IE5ldyBhdCAxMjM1LgoKMjAwMy0wNy0wNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAdHdpZGRsZS5uZXQ+CgoJKiBwcm9jZXNzLmMgKHN5c19jbG9uZSk6IE9yZGVyIGFyZ3VtZW50cyBmb3IgYWxwaGEgdGhlIHNhbWUgYXMgeDg2XzY0LgoJKiBzeXNjYWxsLmMgKEVSRVNUQVJUX1JFU1RBUlRCTE9DSyk6IE5ldy4KCSh0cmFjZV9zeXNjYWxsKTogUHJpbnQgaXQuCgkqIGxpbnV4L2FscGhhL3N5c2NhbGxlbnQuaCAob3NmX3N5c2NhbGwpOiBOYW1lIHByb3Blcmx5LgoJKG9zZl9zZXRfcHJvZ3JhbV9hdHRyaWJ1dGVzKTogRml4IHR5cG8uCgkob3NmX25mc3N2Yyk6IExpa2V3aXNlLgoJKG9zZl9zaWdzZW5kc2V0KTogTGlrZXdpc2UuCgkoZ2V0ZGVudHM2NCwgZ2V0dGlkLCByZWFkYWhlYWQsIHRraWxsLCBzZXR4YXR0ciwgbHNldHhhdHRyLCBmc2V0eGF0dHIsCglnZXR4YXR0ciwgbGdldHhhdHRyLCBmZ2V0eGF0dHIsIGxpc3R4YXR0ciwgbGxpc3R4YXR0ciwgZmxpc3R4YXR0ciwKCXJlbW92ZXhhdHRyLCBscmVtb3ZleGF0dHIsIGZyZW1vdmV4YXR0ciwgZnV0ZXgsIHNjaGVkX3NldGFmZmluaXR5LAoJc2NoZWRfZ2V0YWZmaW5pdHksIHR1eGNhbGwsIGlvX3NldHVwLCBpb19kZXN0cm95LCBpb19nZXRldmVudHMsCglpb19zdWJtaXQsIGlvX2NhbmNlbCwgZXhpdF9ncm91cCwgbG9va3VwX2Rjb29raWUsIGVwb2xsX2NyZWF0ZSwKCWVwb2xsX2N0bCwgZXBvbGxfd2FpdCwgcmVtYXBfZmlsZV9wYWdlcywgc2V0X3RpZF9hZGRyZXNzLAoJcmVzdGFydF9zeXNjYWxsLCBmYWR2aXNlLCB0aW1lcl9jcmVhdGUsIHRpbWVyX3NldHRpbWUsIHRpbWVyX2dldHRpbWUsCgl0aW1lcl9nZXRvdmVycnVuLCB0aW1lcl9kZWxldGUsIGNsb2NrX3NldHRpbWUsIGNsb2NrX2dldHRpbWUsCgljbG9ja19nZXRyZXMsIGNsb2NrX25hbm9zbGVlcCwgc2VtdGltZWRvcCk6IE5ldy4KCjIwMDMtMDctMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzaWduYWwuYyAoc3lzX3Rna2lsbCk6IE5ldyBmdW5jdGlvbi4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIGl0LgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZCB0Z2tpbGwuCgoyMDAzLTA2LTI3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgdHlwZSBgc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0Jy4KCSogZmlsZS5jIChjb252ZXJ0b2xkc3RhdCwgcHJpbnRvbGRzdGF0KTogRGVmaW5lIHVuZGVyCglbTElOVVggJiYgSEFWRV9TVFJVQ1RfX19PTERfS0VSTkVMX1NUQVRdIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBhcmNocy4KCShzeXNfb2xkc3RhdCwgc3lzX29sZGZzdGF0LCBzeXNfb2xkbHN0YXQpOiBMaWtld2lzZS4KCSogbGludXgvZHVtbXkuaCBbISBIQVZFX1NUUlVDVF9fX09MRF9LRVJORUxfU1RBVF0KCShzeXNfb2xkc3RhdCwgc3lzX29sZGZzdGF0LCBzeXNfb2xkbHN0YXQpOiAjZGVmaW5lIHRvIHByaW50YXJncy4KCjIwMDMtMDYtMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWM6IFNITUVESUEgLT4gU0g2NAoJKiBkZWZzLmg6IExpa2V3aXNlLgoJKiBtZW0uYzogTGlrZXdpc2UuCgkqIHByb2Nlc3MuYzogTGlrZXdpc2UuCgkqIHNvY2suYzogTGlrZXdpc2UuCgkqIHN5c2NhbGwuYzogTGlrZXdpc2UuCgkqIHV0aWwuYzogTGlrZXdpc2UuCgkqIGxpbnV4L3NobWVkaWEvc3lzY2FsbGVudC5oOiBNb3ZlZCB0byAuLi4KCSogbGludXgvc2g2NC9zeXNjYWxsZW50Lmg6IC4uLiBoZXJlLgoKCSogY29uZmlnLmd1ZXNzOiBVcGRhdGUgZnJvbSBjYW5vbmljYWwgdmVyc2lvbiwgdGltZXN0YW1wIDIwMDMtMDYtMTcuCgkqIGNvbmZpZy5zdWI6IExpa2V3aXNlLgoKCSogc3lzY2FsbC5jIChmb3JjZV9yZXN1bHQpIFtMSU5VWF0gW0FSTV06IEZpeCB2YXJpYWJsZSB1c2FnZS4KCUZyb206IEpvc2h1YSBOZWFsIDx0aW5hcmFAbmV0cGlwZWxpbmUubmV0Pi4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfZnV0ZXgpOiBHcm9rIEZVVEVYX1JFUVVFVUUgYW5kIHByaW50IDV0aCBhcmcuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogc3lzX2Z1dGV4IGFyZ3VtZW50IGNvdW50IGlzIG5vdyA1LCBub3QgNC4KCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MHgvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCglGcm9tIEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+LgoKCSogc3lzY2FsbC5jIChnZXRfc2NubykgW1MzOTAgfHwgUzM5MFhdOiBGaXggb2xkIHZzIG5ldyBtb2RlIGRldGVjdGlvbi4KCUZyb20gTWljaGFlbCBIb2x6aGV1IDxIT0xaSEVVQGRlLmlibS5jb20+LgoKMjAwMy0wNi0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIG5ldC5jIChzeXNfc29ja2V0KTogRGVjb2RlIHByb3RvY29sIGZvciBQRl9JTkVUNiBzYW1lIGFzIFBGX0lORVQuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKMjAwMy0wNi0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTguCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTgtMS4KCjIwMDMtMDYtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9zMzkweC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSBtYW55IHN5c2NhbGxzLgoJKiBsaW51eC9zeXNjYWxsLmggKFNZU19zb2NrZXRfc3ViY2FsbCk6IFVwZGF0ZSBbUzM5MFhdIHZhbHVlLgoKCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSBtYW55IHN5c2NhbGxzLgoJKiBsaW51eC9zeXNjYWxsLmggKFNZU19zb2NrZXRfc3ViY2FsbCk6IFVwZGF0ZSBbUzM5MF0gdmFsdWUuCgoJKiBsaW51eC9zaG1lZGlhL3N5c2NhbGxlbnQuaDogTmV3IGZpbGUuCglGcm9tIFN0ZXBoZW4gVGhvbWFzIDxzdGVwaGVuLnRob21hc0BzdXBlcmguY29tPi4KCgkqIHN0cmFjZS5jICh0cmFjZSk6IFByaW50IGEgbWVzc2FnZSBhbmQgbmV3bGluZSBmb3IgYSBXSUZFWElURUQgcmVwb3J0Cglmcm9tIHRoZSBwcm9jZXNzIHdlIGp1c3QgcHJpbnRlZCBhbiB1bnRlcm1pbmF0ZWQgc3lzY2FsbCBsaW5lIGZvci4KCjIwMDMtMDYtMDMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiB1dGlsLmMgKHByaW50Y2FsbCkgW0xJTlVYXTogRml4IHR5cG8gW0lBNjJdIC0+IFtJQTY0XS4KCglMaW51eC9BUk0gaW1wcm92ZW1lbnRzIGZyb20gUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az46CgkqIGRlZnMuaCBbTElOVVhdIChUQ0JfV0FJVEVYRUNWRSk6IERlZmluZSBmb3IgW0FSTV0gdG9vLgoJKiBwcm9jZXNzLmMgKHN0cnVjdF91c2VyX29mZnNldHMpIFtMSU5VWF0gW0FSTV06IEFkZCBBUk0gcmVnaXN0ZXJzLgoJKiBzaWduYWwuYyBbTElOVVhdIChzeXNfc2lncmV0dXJuKSBbQVJNXTogTmV3IGNhc2UuCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8sIHN5c2NhbGxfZml4dXApIFtMSU5VWF0gW0FSTV06IENhc2UgcmV3cml0dGVuLgoJKGdldF9lcnJvcikgW0xJTlVYXSBbQVJNXTogVXBkYXRlLgoJKHN5c2NhbGxfZW50ZXIpIFtMSU5VWF0gW0FSTV06IE5ldyBjYXNlLgoJKiB1dGlsLmMgKHByaW50Y2FsbCkgW0xJTlVYXSBbQVJNXTogTmV3IGNhc2UuCgoJKiBkZWJpYW4vY29udHJvbCAoU3RhbmRhcmRzLVZlcnNpb24pOiBVcGRhdGUgdG8gMy41LjEwLgoKCSogc3RyYWNlLmMgKG1haW4pOiBJbiBQQVRIIHNlYXJjaCwgYWNjZXB0IG9ubHkgYSByZWd1bGFyIGZpbGUgd2l0aAoJZXhlY3V0ZSBiaXRzIHNldC4gIEZpeGVzIERlYmlhbiBidWcgIzEzNzEwMy4KCjIwMDMtMDYtMDIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuYyAobWFpbik6IFNldCAtcSB3aGVuIGdpdmVuIC1vIGFuZCBub3QgLXAsIGFuZCBub3Qgd2hlbiBub3QKCWdpdmVuIC1vLCB0byBtYXRjaCB3aGF0IHRoZSBtYW4gcGFnZSBhbHdheXMgc2FpZC4KCUZpeGVzIERlYmlhbiBidWcgIzQ3MTEzLCAjMTUzNjc4LgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45Ny4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45Ny0xLgoKCSogY29uZmlndXJlLmFjLCBkZWZzLmgsIG1lbS5jLCBwcm9jZXNzLmMsIHNvY2suYywgc3lzY2FsbC5jLCB1dGlsLmM6CglNZXJnZWQgaW4gU0htZWRpYSBwb3J0IGZyb20gU3RlcGhlbiBUaG9tYXMgPHN0ZXBoZW4udGhvbWFzQHN1cGVyaC5jb20+LgoKCSogY29uZmlnLmd1ZXNzOiBVcGRhdGUgZnJvbSBmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2NvbmZpZy8sCgl0aW1lc3RhbXAgMjAwMy0wNS0yMi4KCSogY29uZmlnLnN1YjogTGlrZXdpc2UsIHRpbWVzdGFtcCAyMDAzLTA1LTI0LgoKMjAwMy0wNS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlZnMuaCAoc3RydWN0IHRjYik6IE5ldyBtZW1iZXIgYG56b21iaWVzJy4KCSogc3RyYWNlLmMgKGFsbG9jdGNiKTogSW5pdGlhbGl6ZSBpdC4KCShkcm9wdGNiKTogSW5jcmVtZW50IG91ciBwYXJlbnQncyB6b21iaWUgY291bnQuCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfd2FpdCk6IERvbid0IGdvIGludG8gVENCX1NVU1BFTkRFRCBpZiB0aGUKCXByb2Nlc3MgaGFzIHpvbWJpZXMgaXQgY2FuIHJlYXAuICBPbiB0aGUgd2F5IG91dCwgaWYgd2UgcmVhcGVkCglhbiB1bnRyYWNlZCBwcm9jZXNzLCBkZWNyZW1lbnQgdGhlIHpvbWJpZSBjb3VudC4KCgkqIHByb2Nlc3MuYyAoc3lzX2Nsb25lKTogTWFzayBDU0lHTkFMIG91dCBvZiBmbGFncyBhbmQgcHJpbnQgdGhhdAoJc2VwYXJhdGVseSB1c2luZyBzaWduYW1lLgoKCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSkgW1RDQl9DTE9ORV9USFJFQURdOiBVc2UgQVJHX0ZMQUdTIGluc3RlYWQKCW9mIGxpdGVyYWwgMCBmb3IgaW5kZXguICBDb25zdWx0IHRoZSByaWdodCBmbGFncyB3aXRob3V0IGNsb2JiZXJpbmcKCWFueXRoaW5nIHdoZW4gd2UgcmVwYXJlbnQgdGhlIG5ldyBjaGlsZCB0byB0aGUgY2FsbGVyJ3MgcGFyZW50IHRocmVhZC4KCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBGaXggc3lzX2Nsb25lIGFyZ3VtZW50IGNvdW50LgoJKiBsaW51eC9zMzkweC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2FscGhhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc2gvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gW1MzOTAgfHwgUzM5MFhdIChBUkdfQ1RJRCwgQVJHX1RMUyk6IEZpeCBzd2FwcGVkCglpbmRpY2VzLiAgUmVwb3J0ZWQgYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4uCgoJKiBzaWduYWwuYyBbTElOVVhdIChTSV9TSUdJTywgU0lfVEtJTEwpOiBOZXcgbWFjcm9zLgoJW0xJTlVYIHx8IFNWUjRdIChzaWdpbmZvX2NvZGVzKTogQWRkIHN0cmluZ3MgZm9yIHRoZW0uCgoJKiBwcm9jZXNzLmMgKHByaW50X2FmZmluaXR5bGlzdCk6IEZpeCBsb29wIGNvbmRpdGlvbi4KCVJlcG9ydGVkIGJ5IElhbiBXaWVuYW5kIDxpYW53QGdlbGF0by51bnN3LmVkdS5hdT4uCgoyMDAzLTA0LTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3lzY2FsbC5jIChxdWFsX2Rlc2MpOiBSZXR1cm4gemVybyBhZnRlciBwYXJzaW5nIG51bWJlci4KCUZyb20gUm9iIExlc2xpZSA8cm9iQG1hcnMub3JnPiwgZml4ZXMgRGViaWFuIGJ1ZyAjMTg4Mzc5LgoKMjAwMy0wNC0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogSGFuZGxlIHNlbXRpbWVkb3Agc3ViY2FsbCBvZiBpcGMgc3lzY2FsbC4KCSogbGludXgvc3lzY2FsbC5oOiBMaWtld2lzZS4KCSogaXBjLmMgW0xJTlVYXSAoc3lzX3NlbXRpbWVkb3ApOiBOZXcgZnVuY3Rpb24uCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKCSogaXBjLmMgKHN5c19zZW1nZXQpOiBNYXNrIG9mZiBwZXJtaXNzaW9uIGJpdHMgZm9yIHJlc291cmNlX2ZsYWdzLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDMtMDQtMDEgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogc29jay5jLCBzdHJlYW0uYzogQ2hlY2sgI2lmZGVmIExJTlVYLCBub3QgbGludXguCgkqIGZpbGUuYzogQWx3YXlzIHByb3ZpZGUgc3lzXyphdHRyLCByZWdhcmRsZXNzIG9mICNpZmRlZiBYQVRUUl9DUkVBVEUuCgoyMDAzLTAzLTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45Ni4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45Ni0xLgoKMjAwMy0wMi0yNiAgU3R1YXJ0IE1lbmVmeSA8c3R1YXJ0Lm1lbmVmeUBzdC5jb20+CgoJVmFyaW91cyBmaXhlcyBmb3IgU3VwZXJIIFtTSF06CgkqIG1lbS5jIChzeXNfb2xkX21tYXApOiBtbWFwKCkgcGFyYW1ldGVycyBwYXNzZWQgaW4gcmVnaXN0ZXJzCgkqIG5ldC5jIChzeXNfcGlwZSksIHN5c2NhbGwuYyAoZ2V0cnZhbDIpOiBwaXBlKCkgcmVzdWx0cyByZXR1cm5lZAoJaW4gcmVnaXN0ZXJzCgkqIHByb2Nlc3MuYyAoY2hhbmdlX3N5c2NhbGwpOiBGaXhlZCByZWdpc3RlciB3aGljaCBob2xkcyBzeXN0ZW0KCWNhbGwgbnVtYmVyCgkqIHV0aWwuYyAoYXJnMF9vZmZzZXQsIGFyZzFfb2Zmc2V0KTogcHJvdmlkZSBkZWZpbml0aW9uCgkqIE1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgZmlsZXMgaW4gbGludXgvc2gKCSogbGludXgvc2gvc3lzY2FsbGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvc2gvZXJybm9lbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3NoL2lvY3RsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zaC9zaWduYWxlbnQuaDogTmV3IGZpbGUuCgoJKiBsaW51eC9pb2N0bGVudC5zaDogVGFrZSBhbiBhcmcgZm9yIGxvY2F0aW9uIG9mIGhlYWRlciBmaWxlcwoJKiBzeXNjYWxsZW50LnNoOiBSZXBsYWNlZCBsb3N0ICQKCjIwMDMtMDMtMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiB0aW1lLmMgW0xJTlVYXTogSGFuZGxlIG5ldyBMaW51eCAyLjUgY2xvY2svdGltZXIgc3lzY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGwuaCwgbGludXgvc3lzY2FsbGVudC5oLCBsaW51eC9kdW1teS5oOiBMaWtld2lzZS4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVzZSBzeXNfZ2V0cmxpbWl0IGZvciAxOTEuCglVc2UgbmFtZSAib2xkX2dldHJsaW1pdCIgZm9yIDc2LgoJUmVwb3J0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoyMDAzLTAzLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19jbG9uZSk6IERvbid0IGRlcmVmZXJlbmNlIHBhcmVudF90aWQgYXJndW1lbnQuCgoyMDAzLTAzLTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogY2xvbmUgdGFrZXMgNSBhcmdzLgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoc3lzX2Nsb25lKSBbWDg2XzY0XTogRml4IGFyZ3VtZW50IG9yZGVyLgoKMjAwMy0wMy0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IEFkZCBleGl0X2dyb3VwIHN5c2NhbGwgYXQgMjMxLgoKMjAwMy0wMy0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSBhbmQgYWRkIG1hbnkgMi41IHN5c2NhbGxzLgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IGNsb25lIHRha2VzIDUgYXJndW1lbnRzLgoJKiBwcm9jZXNzLmMgW0xJTlVYICYmIElBNjRdIChBUkdfKik6IFVwZGF0ZSBmb3IgMi41IGNsb25lIGNhbGxzLgoKMjAwMy0wMy0xMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBGaXggYXJnIGNvdW50cyBmb3IgY2xvbmUgYW5kIGNsb25lMi4KCVVzZSBzeXNfY2xvbmUgZm9yIGNsb25lMi4KCSogbGludXgvc3lzY2FsbC5oOiBEb24ndCBkZWNsYXJlIHN5c19jbG9uZTIuCgkqIHByb2Nlc3MuYyAoc3lzX2Nsb25lKTogUmV3cml0dGVuIHRvIGhhbmRsZSBib3RoIGZsYXZvcnMsCglwcmludCBhbGwgZXh0cmEgYXJncyBkZXBlbmRpbmcgb24gZmxhZyBiaXRzLgoJKHN5c19jbG9uZTIpOiBGdW5jdGlvbiByZW1vdmVkLgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEFkZCBhIGJ1bmNoIG9mIDIuNSBzeXNjYWxscy4KCjIwMDMtMDMtMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKSBbSUE2NF06IERvIFRDQl9XQUlURVhFQ1ZFIGNoZWNrIG9ubHkgd2hlbgoJVENCX0lOU1lTQ0FMTCBpcyBjbGVhciwgbGlrZSBvdGhlciBwbGF0Zm9ybXMgZG8uCgoyMDAzLTAzLTA0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KCgkqIG1lbS5jIFtMSU5VWF0gKHN5c19yZW1hcF9maWxlX3BhZ2VzKTogTmV3IGZ1bmN0aW9uLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgaXQuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXNlIGl0LgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoc3lzX2Z1dGV4KTogT21pdCBmaW5hbCBpZiBvcCBpcyBub3QgRlVURVhfV0FJVC4KCjIwMDMtMDItMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWM6IEZpeCB0eXBvIGluIG5ldGluZXQvaW4uaCBjaGVjay4KCUFsc28gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IGFuZCA8c3lzL3NvY2tldC5oPiBiZWZvcmUgPG5ldGluZXQvaW4uaD4uCglSZXBvcnRlZCBieSBBbGV4IFNlbWVueWFrYSA8YWxleHNAc25hcmsucmluZXQucnU+LgoKMjAwMy0wMi0yNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTUuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTUtMS4KCgkqIHByb2Nlc3MuYyAoc3lzX2dldHJlc2dpZCk6IEZpeCB0eXBvcyBpbiBhcmd1bWVudCBhY2Nlc3MuCgoyMDAzLTAyLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogcHJvY2Vzcy5jIChzeXNfZ2V0cmVzdWlkKTogRml4IHR5cG9zIGluIGFyZ3VtZW50IGFjY2Vzcy4KCVJlcG9ydGVkIGJ5IEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCjIwMDMtMDItMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40Ljk0LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40Ljk0LTEuCgoJKiB2ZXJzaW9uLmM6IFJlbW92ZWQuCgkqIE1ha2VmaWxlLmFtIChzdHJhY2VfU09VUkNFUyk6IFJlbW92ZSBpdC4KCSogc3RyYWNlLmM6IFVzZSBQQUNLQUdFX05BTUUgYW5kIFZFUlNJT04gbWFjcm9zIGluc3RlYWQgb2YgdmVyc2lvbiB2YXIuCgoJRnJlZUJTRCByZm9yayBzdXBwb3J0IGNoYW5nZXMgZnJvbSBSdXNzIENveCA8cnNjQHBsYW45LmJlbGwtbGFicy5jb20+OgoJKiBzeXNjYWxsLmMgKGludGVybmFsX3N5c2NhbGwpOiBIYW5kbGUgU1lTX3Jmb3JrIHdpdGggaW50ZXJuYWxfZm9yay4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9mb3JrKSBbU1lTX3Jmb3JrXTogQmFpbCBpZiBSRlBST0MgZmxhZyBub3Qgc2V0LgoKMjAwMy0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHNpZ25hbC5jOiBSZW9yZGVyICNpZmRlZnMgc28gSEFWRV9BU01fU0lHQ09OVEVYVF9IIGRvZXNuJ3QgbWF0dGVyIG9uCglTUEFSQywgd2hpY2ggZG9lc24ndCB1c2UgdGhlIGhlYWRlciByZWdhcmRsZXNzLgoKCSogdXRpbC5jIFtMSU5VWCAmJiBTUEFSQ106IERvIHJlbmFtaW5nIGtsdWRnZXMgYXJvdW5kIDxhc20vcmVnLmg+CglsaWtlIHNpZ25hbC5jIGRvZXMuCgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsLmg6IERlY2xhcmUgc3lzX2dldGRlbnRzNjQsIHN5c19sbHNlZWsuCgoJKiBsaW51eC9kdW1teS5oIFshIFNZU19nZXRwbXNnXSAoc3lzX2dldHBtc2cpOiAjZGVmaW5lIHRvIHByaW50YXJncy4KCVshIFNZU19wdXRwbXNnXSAoc3lzX3B1dHBtc2cpOiBMaWtld2lzZS4KCgkqIHByb2Nlc3MuYzogUmVvcmRlciBpbmNsdWRlcyB0byBwdXQgc3lzL3JlZy5oIGJlZm9yZSBsaW51eC9wdHJhY2UuaCwKCXNpbmNlIHRoZXkgY2FuIGNvbmZsaWN0LgoKMjAwMy0wMS0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jICh1c2FnZSk6IE9taXQgLXosIHNpbmNlIGl0IGhhcyBuZXZlciB3b3JrZWQgcHJvcGVybHkuCgkqIE5FV1M6IExpa2V3aXNlLgoKCSogc3RyYWNlLmMgKG1haW4pOiBHcm9rIG5ldyBvcHRpb24gYC1FIHZhcj12YWwnIG9yIGAtRSB2YXInIHRvIHB1dAoJdmFyPXZhbCBpbiBlbnZpcm9uIG9yIHRvIHJlbW92ZSB2YXIsIHJlc3BlY3RpdmVseS4KCSh1c2FnZSk6IE1lbnRpb24gaXQuCgkqIHN0cmFjZS4xLCBORVdTOiBEb2N1bWVudCBpdC4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTMuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTMtMS4KCSogc3RyYWNlLnNwZWMgKFNvdXJjZTApOiBVc2Ugc3RyYWNlLVZFUlNJT04udGFyLmJ6MiBub3cuCgoyMDAzLTAxLTIwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZGVmcy5oIFtMSU5VWF0gW1MzOTAgfHwgUzM5MFhdIChUQ0JfV0FJVEVYRUNWRSk6IERlZmluZSBpdC4KCSogc3lzY2FsbC5jIChnZXRfc2Nubywgc3lzY2FsbF9maXh1cCkgW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF06IEhhbmRsZQoJVENCX1dBSVRFWEVDVkUgc3RhdGUgd2l0aCBzcGVjaWFsIGtsdWRnZXMuCgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoc3lzX2Nsb25lKSBbUzM5MCB8fCBTMzkwWF06IEFyZ3VtZW50IG9yZGVyIGlzCglyZXZlcnNlZCBmcm9tIG90aGVyIGFyY2hpdGVjdHVyZXMuCgoJKiBwcm9jZXNzLmMgKHN5c19leGVjdmUpIFtMSU5VWF06IE1ha2Ugc2V0dGluZyBUQ0JfV0FJVEVYRUNWRSBmbGFnCgljb25kaXRpb25hbCBvbiBbVENCX1dBSVRFWEVDVkVdIGluc3RlYWQgb2YgbGlzdCBvZiBwcm9jZXNzb3JzLgoKCSogdXRpbC5jIChyZXN0b3JlX2FyZzApOiBFdmFsdWF0ZSBhcmdzIGluIG5vLW9wIGRlZm5zLgoKCSogdXRpbC5jIFtTMzkwIHx8IFMzOTBYXSAoYXJnMF9vZmZzZXQsIGFyZzFfb2Zmc2V0KTogRml4IGRlZmluaXRpb25zCglmb3IgY2xvbmUgY2FsbCBvbiBTMzkwLiAgRnJvbSBNaWNoYWVsIEhvbHpoZXUgPGhvbHpoZXVAZGUuaWJtLmNvbT4uCgoyMDAzLTAxLTE3ICBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4KCgkqIHV0aWwuYyBbTElOVVhdIChzZXRicHQpOiBIYW5kbGUgU1lTX3Zmb3JrIGxpa2UgU1lTX2ZvcmsuCgoJKiBsaW51eC9zeXNjYWxsLmggKFNZU19zb2NrZXRfc3ViY2FsbCk6IDI1NiBhbHNvIGZvciBQT1dFUlBDLgoKMjAwMy0wMS0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3Bvd2VycGMvZXJybm9lbnQuaDogQWRkIG1pc3NpbmcgZXJybm9zLgoJKiBsaW51eC9wb3dlcnBjL2lvY3RsZW50Lmg6IFVwZGF0ZSBpb2N0bCB2YWx1ZXMuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGlvLmMgW0xJTlVYXSAoc3lzX3ByZWFkLCBzeXNfcHdyaXRlKTogRml4IGxhc3QgY2hhbmdlLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogVXNlIHN5c19nZXRkZW50czY0LCBzeXNfdHJ1bmNhdGU2NCwKCXN5c19mdHJ1bmNhdGU2NCwgaW5zdGVhZCBvZiBwcmludGFyZ3MsIGZvciB0aG9zZSBzeXNjYWxscy4KCSogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3NvY2tldF9zdWJjYWxsKTogT25seSAyNTYgZm9yIFMzOTAsIFMzOTBYLgoJQWxsIG90aGVycyBhdCB0aGUgbW9tZW50IHVzZSBsaW51eC9zeXNjYWxsZW50LmgsIHdoZXJlIGl0J3MgMzAwLgoKCSogc3RyYWNlLjE6IFVwZGF0ZSBidWcgcmVwb3J0aW5nIGluZm8uCgoJKiByZXNvdXJjZS5jIFtMSU5VWF0gKHF1b3RhY21kcyk6IEdyb2sgbmV3IGNvbW1hbmQgZW5jb2RpbmdzLgoJRnJvbSBOYXRoYW4gU2NvdHQgPG5hdGhhbnNAZGViaWFuLm9yZz4uCgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40LjkyLgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40LjkyLTEuCgoJKiBjb25maWd1cmUuYWM6IE1hdGNoIHBvd2VycGMqIChpbmNsdWRlcyBwb3dlcnBjNjQpLCBhbmQgZG9uJ3QgbWF0Y2gKCXBwYyAobmV2ZXIgY29tZXMgb3V0IG9mIGNvbmZpZy5zdWIpLgoKCSogcHJvY2Vzcy5jIChzeXNfcHRyYWNlKTogVXNlICNseCBmb3JtYXQgZm9yIGFkZHJlc3MgYXJndW1lbnQuCglbUE9XRVJQQ106IFVzZSBzaXplb2YodW5zaWduZWQgbG9uZykgaW4gcGxhY2Ugb2YgNCBmb3IgbXVsdGlwbGllcnMuCgkqIHByb2Nlc3MuYyBbUE9XRVJQQ106IExpa2V3aXNlLgoJKiBzaWduYWwuYyAoc3lzX3NpZ3JldHVybikgW1BPV0VSUENdOiBMaWtld2lzZS4KCSogc3lzY2FsbC5jIChnZXRfc2NubykgW1BPV0VSUENdOiBMaWtld2lzZS4KCSogdXRpbC5jIFtQT1dFUlBDXTogTGlrZXdpc2UuCgkocHJpbnRudW0pOiBVc2UgbG9uZyBmb3IgTlVNLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBkZWZzLmggKEFMSUdONjQpOiBGaXggZGVmbiBmb3IgUFBDLCBzYW1lIGFzIEZyZWVCU0Qgb25lLgoKCSogdXRpbC5jIFtMSU5VWF0gKHJlc3RvcmVfYXJnMCwgcmVzdG9yZV9hcmcxKTogTmV3IG1hY3JvcywgZGVmaW5lZAoJYXBwcm9wcmlhdGVseSB2aWEgc2V0X2FyZzAgb3Igbm8tb3BzIGZvciBlYWNoIGFyY2hpdGVjdHVyZS4KCShjbGVhcmJwdCk6IFVzZSB0aG9zZSBpbnN0ZWFkIG9mIHNldF9hcmcwIGFuZCBzZXRfYXJnMS4KCgkqIGRlZnMuaCBbX0xBUkdFRklMRTY0X1NPVVJDRV0gKF9MRlM2NF9MQVJHRUZJTEUpOiBEZWZpbmUgaXQuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXNlIHN5c19nZXRkZW50czY0LCBzeXNfdHJ1bmNhdGU2NCwKCXN5c19mdHJ1bmNhdGU2NCwgaW5zdGVhZCBvZiBwcmludGFyZ3MsIGZvciB0aG9zZSBzeXNjYWxscy4KCgkqIHByb2Nlc3MuYzogVXNlIDxsaW51eC9wdHJhY2UuaD4gcmVnYXJkbGVzcyBvZiA8c3lzL3JlZy5oPi4KCShzeXNfcHRyYWNlKTogVXNlIHByaW50eHZhbC4KCShwdHJhY2VfY21kcyk6IE1ha2UgUFRSQUNFX0dFVFJFR1MgZXQgYWwgY29uZGl0aW9uYWwgb24gI2lmZGVmIFBUUkFDRV8qCglpbnN0ZWFkIG9mIG9ubHkgI2lmZGVmIFNVTk9TNC4gIEFkZCBQVFJBQ0VfW0dTXUVURlBYUkVHUy4KCgkqIGlwYy5jIChQUklOVENUTCk6IE5ldyBtYWNyby4gICNpZmRlZiBJUENfNjQsIGZhY3RvciBvdXQgdGhlIGZsYWcgYW5kCglwcmludCBpdCBiZWZvcmUgdXNpbmcgcHJpbnR4dmFsLgoJKHN5c19tc2djdGwsIHN5c19zZW1jdGwsIHN5c19zaG1jdGwpOiBVc2UgaXQuCgoyMDAzLTAxLTEzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlnLmd1ZXNzOiBVcGRhdGUgZnJvbSBmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2NvbmZpZy8sCgl0aW1lc3RhbXAgMjAwMy0wMS0xMC4KCSogY29uZmlnLnN1YjogTGlrZXdpc2UsIHRpbWVzdGFtcCAyMDAzLTAxLTAzLgoJKiBpbnN0YWxsLXNoOiBVcGRhdGUgZnJvbSBBdXRvbWFrZSAxLjcuMi4KCgkqIGxpbnV4L3Bvd2VycGMvc2lnbmFsZW50Lmg6IEFkZCBTSUdSVE1JTi4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IEFkZCBtaXNzaW5nIHN5c3RlbSBjYWxscy4KCURlY29kZSBtb3JlIHN5c3RlbSBjYWxscywgd2Ugd2VyZSBqdXN0IHByaW50YXJncyBmb3IgbWFueSB0aGluZ3MuCglSZW1vdmUgc29tZSB4ODYtc3BlY2lmaWMgc3lzdGVtIGNhbGxzLgoJUmVtb3ZlIHR3byBzeXNjYWxscyBiZXR3ZWVuIHRoZSBzb2NrZXQgYW5kIGlwYyBzeXNjYWxscywKCWl0IHdhcyByZXN1bHRpbmcgaW4gYWxsIElQQyBzeXNjYWxscyBiZWluZyBvZmYgYnkgdHdvLgoKCSogaW9jdGwuYyAoaW9jdGxfZGVjb2RlKSBbUE9XRVJQQ106IERlY29kZSB0ZXJtIGlvY3RscyBsaWtlIEFscGhhLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBkZWZzLmggW1BPV0VSUENdIChVRVNQLCBFSVAsIEVBWCwgT1JJR19FQVgpOiBSZW1vdmUgdGhpcyBjcnVmdC4KCVtMSU5VWCAmJiBQT1dFUlBDICYmICFfX3Bvd2VycGM2NF9fXSAoQUxJR042NCk6IE5ldyBtYWNyby4KCSogaW8uYyAoc3lzX3ByZWFkLCBzeXNfcHdyaXRlKTogVXNlIEFMSUdONjQuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIHRlcm0uYyBbTElOVVhdOiBHZXQga2VybmVsIGRlZmluaXRpb24gb2Ygc3RydWN0IHRlcm1pb3MuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBMb29rIGluIHNvdW5kLyBkaXJlY3RvcnkgdG9vLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBkZXNjLmMgKHByaW50ZmxvY2s2NCk6IEZpeCBBRERSIGFyZ3VtZW50IHR5cGUuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIHN0cmFjZS5jIFshIEhBVkVfU1RSU0lHTkFMXTogQ2xlYW4gdXAgI2lmZGVmcyBvbiBkZWNscyBmb3IKCXN5c19zaWdsaXN0IGFuZCBfc3lzX3NpZ2xpc3QuCglSZXBvcnRlZCBieSBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+LgoKCSogbmV0LmM6IEhBVkVfT1BUSERSIC0+IEhBVkVfU1RSVUNUX09QVEhEUgoJUmVwb3J0ZWQgYnkgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPi4KCgkqIGxpbnV4L3N5c2NhbGwuaCBbQVJNXSAoU1lTX3NvY2tldF9zdWJjYWxsKTogU2V0IHRvIDMwMC4KCjIwMDMtMDEtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40LjkxLgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40LjkxLTEKCgkqIHV0aWwuYyBbTElOVVggJiYgWDg2XzY0XSAoYXJnMF9vZmZzZXQsIGFyZzFfb2Zmc2V0KTogVXNlIGNvcnJlY3QKCXZhbHVlcyBmb3IgeDg2LTY0LCBjb25kaXRpb25hbCBvbiBjdXJyZW50X3BlcnNvbmFsaXR5LgoKCSogc3RyYWNlLmMgKGRyb3B0Y2IpOiBDbGVhciBmbGFncyB3b3JkIGJlZm9yZSBjYWxsaW5nIHJlYnVpbGRfcG9sbHYuCgoJKiBjb25maWd1cmUuYWM6IENoZWNrIHN0cnVjdCBUX2Nvbm5fcmVzIGZvciBRVUVVRV9wdHIgb3IgQUNDRVBUT1JfaWQuCgkqIHN0cmVhbS5jIChwcmludF90cmFuc3BvcnRfbWVzc2FnZSk6IFVzZSAjaWZkZWZzIGZvciB0aG9zZSBtZW1iZXJzLgoKCSogc3RyYWNlLmMgKHJlYnVpbGRfcG9sbHYpOiBGaXggdHlwbzogc3RydWN0IHBvbGwgLT4gc3RydWN0IHBvbGxmZC4KCgkqIGNvbmZpZ3VyZS5hYzogRml4IHNpZ2luZm9fdC9zaWdfYXRvbWljX3QgY2hlY2tzLgoJVXNlIHByZXJlcXVpc2l0ZSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBmb3IgbmV0aW5ldC8qLmggY2hlY2tzLgoKCSogc3RyYWNlLmMgKHBmZDJ0Y2IpOiBGaXggZm9yIG5ldyB0Y2J0YWIgdHlwZS4KCShyZWJ1aWxkX3BvbGx2KTogTGlrZXdpc2UuCgkoZGV0YWNoKTogUHV0IHZhcmlhYmxlcyB1c2VkIHVuZGVyIFtMSU5VWF0gaW5zaWRlICNpZmRlZi4KCgkqIHByb2Nlc3MuYyAoY2hhbmdlX3N5c2NhbGwpIFtQT1dFUlBDXTogQWRkIG1pc3NpbmcgcmV0dXJuLgoJKiB1dGlsLmMgW1BPV0VSUENdIChhcmcwX29mZnNldCk6IFNldCB0byA0KlBUX1IzLCBub3QgNCpQVF9PUklHX1IzLgoKCSogc3RyYWNlLnNwZWM6IE5ldyBmaWxlLgoJKiBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTAtMQoJKiBkZWJpYW4vcnVsZXMgKGJpbmFyeS1hcmNoKTogRGVwZW5kIG9uIGJ1aWxkLgoJKGNsZWFuKTogRG9uJ3QgdHJ5IHRvIHJ1biBNYWtlZmlsZS5pbi4KCSogZGViaWFuL2NvbnRyb2wgKFN0YW5kYXJkcy1WZXJzaW9uKTogTm93IDMuNS44LgoKCSogY29uZmlndXJlLmFjOiBEaWRkbGUgQ0ZMQUdTIGFmdGVyIEFDX1BST0dfQ0MsIG5vdCBiZWZvcmUuCgoyMDAzLTAxLTA5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3lzY2FsbC5jIChmb3JjZV9yZXN1bHQpIFtTMzkwIHx8IFMzOTBYXTogRml4IHR5cG8uCgoJKiBkZWJpYW4vY29udHJvbDogVXBkYXRlIE1haW50YWluZXI6IGZpZWxkLgoKMjAwMy0wMS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIE5FV1M6IFVwZGF0ZSBmb3IgNC40LjkwIHRlc3QgcmVsZWFzZS4KCglTdXBwb3J0IGZvciBuZXcgTGludXggMi41IHRocmVhZCBmZWF0dXJlcy4KCSogZGVmcy5oIFtMSU5VWF06IERlZmluZSBfX05SX2V4aXRfZ3JvdXAgaWYgbm90IGRlZmluZWQuCgkoc3RydWN0IHRjYik6IE5ldyBtZW1iZXJzIG5jbG9uZV90aHJlYWRzLCBuY2xvbmVfZGV0YWNoZWQsCglhbmQgbmNsb25lX3dhaXRpbmcuCgkoVENCX0NMT05FX0RFVEFDSEVELCBUQ0JfQ0xPTkVfVEhSRUFELCBUQ0JfR1JPVVBfRVhJVElORyk6IE5ldyBtYWNyb3MuCgkod2FpdGluZ19wYXJlbnQpOiBNYWNybyByZW1vdmVkLgoJKHBpZDJ0Y2IpOiBEZWNsYXJlIGl0LgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKSBbVENCX0NMT05FX1RIUkVBRF06IFJlcGFyZW50IHRoZSBuZXcKCWNoaWxkIHRvIG91ciBwYXJlbnQgaWYgd2UgYXJlIGEgQ0xPTkVfVEhSRUFEIGNoaWxkIG91cnNlbHZlcy4KCU1haW50YWluIFRDQl9DTE9ORV9USFJFQUQgYW5kIFRDQl9DTE9ORV9ERVRBQ0hFRCBmbGFncyBhbmQgY291bnRzLgoJKGludGVybmFsX3dhaXQpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogRmFjdG9yIG91dCBkZXRhY2hlZCBjaGlsZHJlbiB3aGVuCglkZXRlcm1pbmluZyBpZiB3ZSBoYXZlIGFueS4gIElmIFRDQl9DTE9ORV9USFJFQUQgaXMgc2V0LCBjaGVjawoJcGFyZW50J3MgY2hpbGRyZW4gaW5zdGVhZCBvZiBvdXIgb3duLCBhbmQgYnVtcCBuY2xvbmVfd2FpdGluZyBjb3VudC4KCShpbnRlcm5hbF9leGl0KSBbX19OUl9leGl0X2dyb3VwXTogU2V0IHRoZSBUQ0JfR1JPVVBfRVhJVElORyBmbGFnIGlmCgl0aGUgc3lzY2FsbCB3YXMgZXhpdF9ncm91cC4KCSogc3lzY2FsbC5jIChpbnRlcm5hbF9zeXNjYWxsKTogVXNlIGludGVybmFsX2V4aXQgZm9yIGV4aXRfZ3JvdXAuCgkqIHN0cmFjZS5jIChwaWQydGNiKTogTm8gbG9uZ2VyIHN0YXRpYy4KCShhbGxvY3RjYikgW1RDQl9DTE9ORV9USFJFQURdOiBJbml0aWFsaXplIG5ldyBmaWVsZHMuCgkoZHJvcHRjYikgW1RDQl9DTE9ORV9USFJFQURdOiBNYWludGFpbiBuZXcgZmllbGRzLgoJSWYgd2UgaGF2ZSB0aHJlYWQgY2hpbGRyZW4sIHNldCBUQ0JfRVhJVElORyBhbmQgZG9uJ3QgY2xlYXIgdGhlIFRDQi4KCShyZXN1bWUpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogRGVjcmVtZW50IHBhcmVudCdzIG5jbG9uZV93YWl0aW5nLgoJKGRldGFjaCkgW1RDQl9DTE9ORV9USFJFQURdOiBXaGVuIGNhbGxpbmcgcmVzdW1lLCBjaGVjayBhbGwgdGhyZWFkCgljaGlsZHJlbiBvZiBvdXIgcGFyZW50IHRoYXQgbWlnaHQgYmUgd2FpdGluZyBmb3IgdXMgdG9vLgoJW1RDQl9HUk9VUF9FWElUSU5HXSAoaGFuZGxlX2dyb3VwX2V4aXQpOiBOZXcgZnVuY3Rpb24uCgkodHJhY2UpIFtUQ0JfR1JPVVBfRVhJVElOR106IFVzZSB0aGF0IGluIHBsYWNlIG9mIGRldGFjaCBvciBkcm9wdGNiLgoKCVJldmFtcCAtZiBzdXBwb3J0IGZvciBMaW51eC4KCSogdXRpbC5jIFtMSU5VWF0gKHNldGJwdCwgY2xlYXJicHQpOiBOZXcgaW1wbGVtZW50YXRpb25zIHRoYXQgdHdlYWsKCXRoZSBzeXN0ZW0gY2FsbCB0byBiZSBjbG9uZSB3aXRoIENMT05FX1BUUkFDRSBzZXQuICBWYXJpb3VzIG5ldyBzdGF0aWMKCWhlbHBlciBmdW5jdGlvbnMuCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfY2xvbmUpOiBEZWZpbmUgYWxzbyAjaWZkZWYgU1lTX2Nsb25lMi4KCUluaXRpYWxpemUgVENQQ0hJTEQtPnBhcmVudCBmaWVsZC4KCVtDTE9ORV9QVFJBQ0VdOiBEb24ndCBkbyBQVFJBQ0VfQVRUQUNIIGhlcmUsIGJlY2F1c2UgaXQncyBwcmVhdHRhY2hlZC4KCUNoZWNrIGluIGNhc2UgdGhlIG5ldyBjaGlsZCBpcyBpbiB0aGUgdGNiIGFscmVhZHkuCgkoaW50ZXJuYWxfZm9yaykgW0xJTlVYXTogSnVzdCBjYWxsIGludGVybmFsX2Nsb25lLgoJKiBzdHJhY2UuYyAodHJhY2UpIFtMSU5VWF06IFVuZGVyIC1mLy1GLCBncm9rIGFuIHVua25vd24gcGlkCglyZXBvcnRpbmcgdG8gd2FpdCwgcHV0IGl0IGluIHRoZSBUQ0Igd2l0aCBUQ0JfQVRUQUNIRUR8VENCX1NVU1BFTkRFRC4KCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50MS5oIChzeXNfb2xkbHN0YXQpOiAjZGVmaW5lIGFzIHByaW50YXJncy4KCgkqIGZpbGUuYyBbTElOVVhdOiAjdW5kZWYgc3RfW2FtY110aW1lIGluIGNhc2UgdGhleSBhcmUgbWFjcm9zLgoKCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IE5ldyB2YXJpYWJsZSwgZGVmaW5lIHRvICQoV0FSTkZMQUdTKS4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIGRlYmlhbi9wb3N0aW5zdCBhbmQgZGViaWFuL3ByZXJtLgoKMjAwMy0wMS0wOSAgV2ljaGVydCBBa2tlcm1hbiAgPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIGRlYmlhbi9wb3N0aW5zdCwgZGViaWFuL3ByZXJtOiByZW1vdmVkLCAvdXNyL2RvYyBzeW1saW5rIGlzIG5vCglsb25nZXIgdXNlZAoJKiBkZWJpYW4vcnVsZXM6IG5vIGxvbmdlciBpbnN0YWxsIHBvc3RpbnN0IGFuZCBwcmVybQoJKiBkZWJpYW4vY29udHJvbDogZG8gbm90IGVuZCBzdW1tYXJ5IHdpdGggZnVsbCBzdG9wIChsaW50aWFuKQoKMjAwMi0xMi0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIE1ha2VmaWxlLmFtIChiaW5fU0NSSVBUUyk6IE5ldyB2YXJpYWJsZSwgbGlzdCBzdHJhY2UtZ3JhcGguCgkoRVhUUkFfRElTVCk6IEFkZCBtaXNzaW5nIGZpbGVzLgoKCSogY29uZmlndXJlLmFjOiBGaXggYXNtL3NpZ2NvbnRleHQuaCBjaGVjayB0byBpbmNsdWRlIHByZXJlcXVpc2l0ZS4KCgkqIHN5c2NhbGwuYyAocXVhbGlmeV9vbmUpOiBOZXcgZnVuY3Rpb24uCgkocXVhbF9vcHRpb25zKTogUmVwbGFjZSBsb29rdXAgZmllbGQgd2l0aCBxdWFsaWZ5LCB1cGRhdGUgaW5pdGlhbGl6ZXIuCgkocXVhbGlmeSk6IFVwZGF0ZSBjYWxsZXIuCgkocXVhbF9zaWduYWwsIHF1YWxfZmF1bHQsIHF1YWxfZGVzYyk6IFJld3JpdHRlbiBmcm9tIGxvb2t1cF8qLgoJKHF1YWxfc3lzY2FsbCk6IFJld3JpdHRlbiBsb29rdXBfc3lzY2FsbCwgbWF0Y2ggbmFtZSBtb3JlIHRoYW4gb25jZS4KCUZpeGVzIFJIIzcwNTc5LCBiaXRlcyBJQTY0IC1lZm9vIHdoZW4gZm9vIGV4aXN0cyBvbiBJQTMyLgoKCSogdmVyc2lvbi5jICh2ZXJzaW9uKTogTWFrZSBjb25zdCwgYnVtcCB0byA0LjQuOTAuCgkqIHN0cmFjZS5jOiBVcGRhdGUgZGVjbC4KCgkqIE1ha2VmaWxlLmFtIFtMSU5VWCAmJiBYODZfNjRdOiBSZW1vdmUgY3J1ZnQuCgkqIGxpbnV4L3g4Nl82NC9lcnJub2VudDEuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3g4Nl82NC9pb2N0bGVudDEuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3g4Nl82NC9zaWduYWxlbnQxLmg6IE5ldyBmaWxlLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudDEuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3g4Nl82NC9pMzg2LWhlYWRlcnMuZGlmZjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC94ODZfNjQvbWFrZWhlYWRlcnMuc2g6IEZpbGUgcmVtb3ZlZC4KCSogbGludXgveDg2XzY0L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgoJKiBsaW51eC9zeXNjYWxsZW50LmggW1g4Nl82NF06IERpc2FibGUgc2FuaXR5IGNoZWNrcywgc3ViY2FsbCBzdHVmZiBpcwoJYWxyZWFkeSBicm9rZW4gZm9yIDMyLWJpdCBwZXJzb25hbGl0eSBvbiB4ODYtNjQuCgoyMDAyLTEyLTI5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbTogUHVudCBzdWJkaXJzLCBoYW5kbGUgZXZlcnl0aGluZyBoZXJlLgoJKiBsaW51eC9NYWtlZmlsZS5hbTogRmlsZSByZW1vdmVkLgoJKiBmcmVlYnNkL01ha2VmaWxlLmFtOiBGaWxlIHJlbW92ZWQuCgkqIHN1bm9zNC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBzdnI0L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgoJKiBsaW51eC9hbHBoYS9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9ocHBhL01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L2lhNjQvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvcG93ZXJwYy9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9zMzkwL01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3MzOTB4L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgoyMDAyLTEyLTI2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3lzY2FsbGVudC5zaDogR3JvayB0aHJlZSBmbGF2b3JzIG9mICNkZWZpbmUgbGluZSwgdW5pcXVpZnkuCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5zaDogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuc2g6IEZpbGUgcmVtb3ZlZC4KCgkqIGxpbnV4L01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KCSogbGludXgvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogZnJlZWJzZC9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCgkqIGZyZWVic2QvaTM4Ni9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCgkqIGZyZWVic2QvaTM4Ni9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoKMjAwMi0xMi0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCglVcGRhdGUgdG8gQXV0b2NvbmYgMi41NywgYW5kIEF1dG9tYWtpZnkgd2l0aCB2ZXJzaW9uIDEuNy4KCSogTWFrZWZpbGUuYW06IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBjb25maWd1cmUuaW46IE1vdmVkIHRvIC4uLgoJKiBjb25maWd1cmUuYWM6IC4uLiBoZXJlLiAgVXBkYXRlIGZvciBBdXRvY29uZiAyLjV4IGFuZCBBdXRvbWFrZS4KCSogYWNsb2NhbC5tNDogTW92ZWQgdG8gLi4uCgkqIGFjaW5jbHVkZS5tNDogLi4uIGhlcmUuICBVcGRhdGUgZm9yIEF1dG9jb25mIDIuNXguCgkqIGFjY29uZmlnLmg6IEZpbGUgcmVtb3ZlZC4KCSogQVVUSE9SUzogTmV3IGZpbGUsIG1ha2VzIGF1dG9tYWtlIGhhcHB5LgoJKiBhdXRvZ2VuLnNoOiBGaWxlIHJlbW92ZWQuCgkqIFJFQURNRS1DVlM6IFVwZGF0ZSB0byByZWNvbW1lbmQgYXV0b3JlY29uZiBpbnN0ZWFkLgoJKiBmaWxlLmM6IEhBVkVfU1RfKiAtPiBIQVZFX1NUUlVDVF9TVEFUX1NUXyouCgkqIG5ldC5jOiBIQVZFX1NJTjZfU0NPUEVfSUQgLT4gSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQsCglIQVZFX01TR19DT05UUk9MIC0+IEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfQ09OVFJPTC4KCSogc3RyYWNlLmM6ICpfREVDTEFSRUQgLT4gSEFWRV9ERUNMXyoKCSogc3RyZWFtLmM6IEhBVkVfKiAtPiBIQVZFX1NUUlVDVF8qCgoJKiBsaW51eC9NYWtlZmlsZS5pbiAoaW9jdGxkZWZzLmggaW9jdGxzLmgpOiBVc2UgJChTSEVMTCkgaW5zdGVhZCBvZgoJc2gsIGFuZCB1c2UgJChzcmNkaXIpIHRvIGZpbmQgdGhlIHNjcmlwdC4KCSogbGludXgvcG93ZXJwYy9NYWtlZmlsZS5pbiAoaW9jdGxlbnQucmF3KTogRmluZCBpb2N0bGVudC5zaCBpbiAuLi8uCgkoaW9jdGxzb3J0Lm8pOiBVc2UgLi4vaW9jdGxzb3J0LmMsIG5vdCAuLi8uLi9pb2N0bHNvcnQuYy4KCSogbGludXgveDg2XzY0L01ha2VmaWxlLmluIChoZWFkZXJzKTogUmVuYW1lZCB0byBhbGwuCgkqIGxpbnV4L2FscGhhL01ha2VmaWxlLmluOiBBZGQgZW1wdHkgaW5zdGFsbCB0YXJnZXQuCgkqIGxpbnV4L3g4Nl82NC9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvTWFrZWZpbGUuaW46IExpa2V3aXNlLgoJKiBsaW51eC9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCgoyMDAyLTEyLTI2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZGVmcy5oIFtMSU5VWCAmJiBNSVBTXSAoTUFYX1FVQUxTKTogU2V0IHRvIDUwMDAsIG5vdCA0OTk5LgoJRnJvbSBEYW5pZWwgSmFjb2Jvd2l0eiA8ZHJvd0BmYWxzZS5vcmc+LgoKMjAwMi0xMi0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogQWRkIHNvbWUgbmV3IDIuNSBzeXNjYWxsIG5hbWVzLgoJTm93IGNsb25lIHRha2VzIDUgYXJncy4KCSogcHJvY2Vzcy5jIFtMSU5VWF0gKGNsb25lX2ZsYWdzKTogVXBkYXRlIHdpdGggMi41IGZsYWcgYml0cy4KCVtMSU5VWF0gKHN5c19jbG9uZSk6IFByaW50IG5ldyBhcmdzLgoJKiBtZW0uYyAocHJpbnRfbGR0X2VudHJ5KTogTWFrZSBnbG9iYWwuCgoJKiBsaW51eC9zeXNjYWxsLmggW0kzODYgfHwgSUE2NF0gKFNZU19zb2NrZXRfc3ViY2FsbCk6IEJ1bXAgdG8gMzAwIGZvcgoJc2FmZXR5LCBzaW5jZSB1cCB0byAyNjAgYXJlIGFscmVhZHkgdXNlZCBpbiAyLjUga2VybmVscy4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVcGRhdGUgdGhlIHRhYmxlLgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBzeXNjYWxsLmMgKGZvcmNlX3Jlc3VsdCk6IE5ldyBmdW5jdGlvbi4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF93YWl0KTogSGFuZGxlIEVDSElMRCBleGl0IGZyb20gd2FpdCBjYWxsIHdpdGgKCVdOT0hBTkcgZmxhZyBzZXQ7IGZvcmNlIHRoZSByZXR1cm4gdmFsdWUgdG8gMCBpbiB0aGUgaW5mZXJpb3Igd2hlbiBpdAoJaGFzIGxpdmUgY2hpbGRyZW4gd2UgYXJlIHRyYWNpbmcuCgkqIE5FV1M6IE1lbnRpb24gdGhlIGJ1ZyBmaXguCgoyMDAyLTEyLTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IFJlbW92ZSBwbGFjZWhvbGRlcnMgMjc1LTI5OCB0byBjYXRjaCB1cAoJd2l0aCBsaW51eC9zeXNjYWxsZW50LmggYWRkaXRpb25zLgoKCSogc3RyYWNlLmMgKHRjYnRhYik6IE1ha2UgdGhpcyBhIHBvaW50ZXIgdG8gcG9pbnRlcnMsIG5vdCBhbiBhcnJheS4KCSh0Y2J0YWJzaXplKTogTmV3IHZhcmlhYmxlLgoJKG1haW4pOiBJbml0aWFsaXplIHRoZW0gdXNpbmcgZHluYW1pYyBhbGxvY2F0aW9uLgoJKGFsbG9jdGNiLCBtYWluKTogVXNlIHRjYnRhYnNpemUgaW4gcGxhY2Ugb2YgTUFYX1BST0NTOyBpbmRpcmVjdC4KCShwaWQydGNiLCBjbGVhbnVwKTogTGlrZXdpc2UuCglbVVNFX1BST0NGU10gKHBvbGx2KTogTWFrZSB0aGlzIGEgcG9pbnRlciwgbm90IGFuIGFycmF5OyBtYWtlIHN0YXRpYy4KCShyZWJ1aWxkX3BvbGx2KTogRHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIHZlY3Rvci4KCSogZGVmcy5oICh0Y2J0YWIpOiBVcGRhdGUgZGVjbHMuCgkoTUFYX1BST0NTKTogTWFjcm8gcmVtb3ZlZCwgbm8gbW9yZSBzdGF0aWMgbGltaXQgb24gdGhpcy4KCSogcHJvY2Vzcy5jIChmb3JrX3RjYik6IE5ldyBmdW5jdGlvbi4KCShpbnRlcm5hbF9jbG9uZSwgaW50ZXJuYWxfZm9yayk6IFVzZSBpdCBpbnN0ZWFkIG9mIGNoZWNraW5nIG5wcm9jcy4KCgkqIHN0cmFjZS5jIChkZXRhY2gpIFtMSU5VWF06IFVzZSBfX1dBTEwgKG9yIGEgc2Vjb25kIHRyeSB3aXRoIF9fV0NMT05FKQoJaW4gd2FpdCBhZnRlciBzZW5kaW5nIFNJR1NUT1AuCgoyMDAyLTEyLTE2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc2lnbmFsLmMgKHNwcmludHNpZ21hc2spOiBJbmNyZWFzZSBzdGF0aWMgYnVmZmVyIHNpemUgdG8gYWNjb3VudCBmb3IKCXdvcnN0IHBvc3NpYmxlIGNhc2UuICBSZXBvcnRlZCBieSBEYW5pZWwgSmFjb2Jvd2l0eiA8ZHJvd0BmYWxzZS5vcmc+LgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHdhaXQ0X29wdGlvbnMpOiBGaXggX19XQ0xPTkUgdmFsdWUuICBBZGQKCV9fV05PVEhSRUFEIGFuZCBfX1dBTEwuCgoJKiBzdHJhY2UuYyAodHJhY2UpIFtMSU5VWF06IE9ubHkgY2hlY2sgZXJybm8gaWYgd2FpdDQgYWN0dWFsbHkgZmFpbHMsCglzbyB3ZSBkb24ndCByZXBlYXQgYSB3YWl0IGFuZCB0aHVzIGRyb3AgYSBzdGF0dXMuICBGaXhlcyBSSCM2MjU5MS4KCjIwMDItMTItMTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgKHNldGFyZykgW1BPV0VSUENdOiBTdXBwb3J0IGl0LgoKCSogdXRpbC5jIFtQT1dFUlBDXSAoTE9PUCk6IEZpeCB2YWx1ZSwgbm93IDB4NDgwMDAwMDAgKDA6IGIgMGIpLgoJT2xkIHZhbHVlIHdhcyBib2d1cywgbm90IGV2ZW4gYSBwcm9wZXIgaW5zdHJ1Y3Rpb24uCglGcm9tIEd1eSBNLiBTdHJlZXRlciA8c3RyZWV0ZXJAcmVkaGF0LmNvbT4uCgoJKiBzdHJhY2UuYyAobWFpbikgWyEgVVNFX1BST0NGU106IEFsd2F5cyByZXNldCBTSUdDSExEIHRvIFNJR19ERkwuCgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBwdXRwbXNnLgoJKiBzdHJlYW0uYyAoc3lzX2dldHBtc2csIHN5c19wdXRwbXNnKTogTWFrZSB0aGVzZSBjb25kaXRpb25hbCBvbgoJI2lmZGVmIFNZU18qLCByYXRoZXIgdGhhbiBvbiBIQVZFX1BVVFBNU0cuCgoJKiBhY2xvY2FsLm00IChBQ19TVEFUNjQpOiBJbmNsdWRlIDxsaW51eC90eXBlcy5oPiBiZWZvcmUgPGFzbS9zdGF0Lmg+CglpbiB0ZXN0LiAgVGVzdCBvdXIgb3duICNpZmRlZiBMSU5VWCByYXRoZXIgdGhhbiBwcmVkZWZpbmVkIGBsaW51eCcuCgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogVXNlIHN5c19sbHNlZWsgZm9yIF9sbHNlZWsuCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIHN5c2NhbGwuYyAoc3lzY2FsbF9lbnRlcikgW0xJTlVYICYmIFBPV0VSUENdOiBEZWZpbmUgUFRfT1JJR19SMyBpZgoJbm90IGRlZmluZWQsIHNpbmNlIDxhc20vcHRyYWNlLmg+IGRlZmluZXMgaXQgb25seSAjaWZkZWYgX19LRVJORUxfXy4KCSogcHJvY2Vzcy5jOiBMaWtld2lzZS4KCgkqIGRlc2MuYyAoc3lzX29zZl9zZWxlY3QpOiBBZGQgbWlzc2luZyByZXR1cm4gdHlwZS4KCgkqIHN5c2NhbGwuYyAodHJhY2Vfc3lzY2FsbCk6IFVzZSBzdHJlcnJvciwgbm90IHN5c19lcnJsaXN0L3N5c19uZXJyLgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IFJlbW92ZSBtYWNyb3MgZm9yIHN5c19kZWxldGVfbW9kdWxlLAoJc3lzX25hbm9zbGVlcCwgYm90aCBhbHJlYWR5IGluIGxpbnV4L2R1bW15LmguCgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKTogTW92ZSBzdGF0aWMgYGN1cnJwZXJzJyBpbnNpZGUgI2lmZGVmIFg4Nl82NC4KCSh0cmFjZV9zeXNjYWxsKTogRml4IHJldHVybiB3aXRob3V0IHZhbHVlLgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBVcGRhdGUgdGFibGUgd2l0aCBuYW1lcyBvZiBuZXcgc3lzY2FsbHMKCWlvX3NldHVwLCBpb19kZXN0cm95LCBpb19nZXR2ZW50cywgaW9fc3VibWl0LCBpb19jYW5jZWwuCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogc2lnbmFsLmMgW0xJTlVYICYmIEkzODZdOiBQcm92aWRlIFNBX1JFU1RPUkVSIGNvbnN0YW50IGlmIG5vdAoJZGVmaW5lZC4gIElmIHRoZSBiaXQgaXMgc2V0LCBwcmludCB0aGUgc2FfcmVzdG9yZXIgZmllbGQgb2Ygc2lnYWN0aW9uLgoKCSogbWVtLmM6IEFkZCBzeXNfe2dldCxzZXR9X3RocmVhZF9hcmVhLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgdGhlbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVcGRhdGUgdGhlIHRhYmxlIGZvciB0aGVzZS4KCSogbGludXgvZHVtbXkuaCAoc3lzX21vZGlmeV9sZHQpOiBEZWZpbmUgb25seSAjaWZuZGVmIEkzODYuCgkoc3lzX2dldF90aHJlYWRfYXJlYSwgc3lzX3NldF90aHJlYWRfYXJlYSk6IE5ldyBtYWNyb3MgI2lmbmRlZiBJMzg2LgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgbGludXgveGF0dHIuaCBhbmQgbGludXgvZnV0ZXguaCBoZWFkZXJzLgoJKiBsaW51eC9zeXNjYWxsLmg6IEFkZCBzeXNfKiBkZWNscyBmb3IgbmV3IHN5c2NhbGxzIGdldHBtc2csIHB1dHBtc2csCglyZWFkYWhlYWQsIHNlbmRmaWxlNjQsIHNldHhhdHRyLCBmc2V0eGF0dHIsIGdldHhhdHRyLCBmZ2V0eGF0dHIsIGludAoJbGlzdHhhdHRyLCBmbGlzdHhhdHRyLCByZW1vdmV4YXR0ciwgZnJlbW92ZXhhdHRyLCBzY2hlZF9zZXRhZmZpbml0eSwKCXNjaGVkX2dldGFmZmluaXR5LCBmdXRleC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVcGRhdGUgdGhlIHRhYmxlLgoJKiBpby5jOiBBZGQgc3lzX3NlbmRmaWxlNjQuCgkqIGZpbGUuYzogQWRkIHN5c19yZWFkYWhlYWQsIHN5c18qeGF0dHIuCgkqIHByb2Nlc3MuYzogQWRkIHN5c19mdXRleCwgc3lzXyphZmZpbml0eS4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3NvY2tldF9zdWJjYWxsKTogRGVmaW5lIHRvIDI1NiBvbiBhbGwgbWFjaGluZXMuCgkoU1lTX2lwY19zdWJjYWxsKTogQWx3YXlzIFNZU19zb2NrZXRfc3ViY2FsbCArIFNZU19zb2NrZXRfbnN1YmNhbGxzLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUgZm9yIHNvY2tldCBhbmQgaXBjIHN1YmNhbGxzLgoKMjAwMi0xMS0wOSAgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CgoJQnVnZml4IGZvciBzMzkwL3MzOTB4OgoJKiBzeXNjYWxsLmM6IEZpeGVkIHNjbm8gZGVyaXZhdGlvbiBmb3IgczM5MC9zMzkweC4KCjIwMDItMTEtMDYgIE1pY2hhbCBMdWR2aWcgIDxtbHVkdmlnQHN1c2UuY3o+CgoJTWVyZ2VkIHBhdGNoIGZyb20gU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+Cgl0byBhbGxvdyB0aGUgY29tcGlsYXRpb24gb2YgYSBuYXRpdmUgTUlQUyBzdHJhY2UuCgoyMDAyLTExLTA2ICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCUZyb20gTWFydHkgTGVpc25lciA8bGVpc25lckByb2NoZXN0ZXIucnIuY29tPiwKCXJld3JpdHRlbiBieSBtbHVkdmlnOgoJKiBzdHJhY2UuYyAobm90X2ZhaWxpbmdfb25seSk6IE5ldy4KCSh1c2FnZSk6IEFkZGVkIC16IHN3aXRjaCBkZXNjcmlwdGlvbi4KCShtYWluKTogQWRkZWQgLXogc3dpdGNoIHBhcnNpbmcgdG8gbm90X2ZhaWxpbmdfb25seSB2YXJpYWJsZS4KCSogc3lzY2FsbC5jICh0cmFjZV9zeXNjYWxsKTogQWRkZWQgbm90X2ZhaWxpbmdfb25seSBoYW5kbGluZy4KCjIwMDItMTAtMDggIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgoKCU1pc3NpbmcgY29tcGxldGUgY2hhbmdlbG9nIGZvciAyMDAyLTEwLTA3IGNvbW1pdDoKCSogTWFrZWZpbGUuaW46IEFkZGVkIGxpbnV4L3MzOTAsIGxpbnV4L3MzOTB4IHRvIEFMTF9TVUJESVJTLgoJKiBhY2NvbmZpZy5oOiBOZXcgZGVmaW5lIGZvciBzMzkweC4KCSogY29uZmlnLnN1YjogQWRkZWQgbWlzc2luZyBkZWZpbmUgZm9yIHMzOTAgYW5kIG5ldyBvbmUgZm9yIHMzOTB4LgoJKiBjb25maWd1cmUuaW46IEFkZGVkIG5ldyBkZWZpbmUgZm9yIHMzOTB4LgoJKiBmaWxlLmM6IEFkZGVkIG1pc3NpbmcgI3VuZGVmIGRpcmVudDY0IGFuZCBuZXcgZGVmaW5lcyBmb3IgczM5MHguCgkqIGxpbnV4L3MzOTA6IE5ldyBkaXJlY3RvcnkuCgkqIGxpbnV4L3MzOTAvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkwL2Vycm5vZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkwL2lvY3RsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkwL3NpZ25hbGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkweDogTmV3IGRpcmVjdG95LgoJKiBsaW51eC9zMzkweC9NYWtlZmlsZS5pbjogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4L2Vycm5vZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkweC9pb2N0bGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MHgvc2lnbmFsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkweC9zeXNjYWxsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zeXNjYWxsLmg6IEFkZGVkIHN5c19taW5jb3JlKCkgcHJvdG90eXBlIGFuZCBhZGRlZCBuZXcKCXMzOTB4IGRlZmluZXMuCgkqIHByb2Nlc3MuYzogQWRkZWQgczM5MHggZGVmaW5lcy4KCShjaGFuZ2Vfc3lzY2FsbCk6IENoYW5nZWQgaGFuZGxpbmcgZm9yIHMzOTAuCgkoc2V0YXJnKTogQWRkZWQgbWlzc2luZyBzMzkwL3MzOTB4IGNvZGUgaW4gc2V0YXJnKCkuCgkqIHNpZ25hbC5jOiBBZGRlZCBzMzkweCBkZWZpbmUuCgkoc3lzX3NpZ3JldHVybik6IEJ1Z2ZpeCBpbiBzMzkwL3MzOTB4IGNvZGUgKHdyb25nIG51bWJlciBvZgoJYXJndW1lbnRzIHRvIHNwcmludHNpZ21hc2soKSkuCgkqIHN0cmVhbS5jIChpbnRlcm5hbF9zdHJlYW1faW9jdGwpOiBDaGFuZ2VkIGludCBjYXN0IHRvIGxvbmcgY2FzdCwKCXNpbmNlIHByaW50c3RyKCkgZXhwZWN0cyBhIGxvbmcuCgkqIHN5c2NhbGwuYyAoZGVjb2RlX3N1YmNhbGwpOiBDaGFuZ2VkIHNldmVyYWwgdmFyaWFibGVzIHRvIGJlIGxvbmcKCWluc3RlYWQgb2YgaW50IHRvIG1hdGNoIDY0IGJpdCByZXF1aXJlbWVudHMuIEFkZGVkIHMzOTB4IGRlZmluZXMuCgkoc3lzY2FsbF9lbnRlcik6IENoYW5nZWQgdXBlZWsoKSBjYWxsIHRvIG1hdGNoIHMzOTAgYW5kIHMzOTB4CglyZXF1aXJlbWVudHMuCgkqIHV0aWwuYzogQWRkZWQgczM5MHggZGVmaW5lcy4KCjIwMDItMTAtMDcgIE1pY2hhbCBMdWR2aWcgIDxtbHVkdmlnQHN1c2UuY3o+CgoJTWVyZ2VkIHMzOTB4IHBvcnQgYnkgSGVpa28gQ2Fyc3RlbnMgPEhlaWtvLkNhcnN0ZW5zQGRlLmlibS5jb20+CglhbmQgYnVnZml4ZXMgdG8gczM5MCBieSBELkouIEJhcnJvdy4KCjIwMDItMDktMjMgIE1pY2hhbCBMdWR2aWcgIDxtbHVkdmlnQHN1c2UuY3o+CgoJTWVyZ2VkIHg4Ni02NCBwb3J0IGJ5IEFuZGkgS2xlZW4gPGFrQHN1c2UuZGU+CglhbmQgTWljaGFsIEx1ZHZpZyA8bWx1ZHZpZ0BzdXNlLmN6PgoJKiBNYWtlZmlsZS5pbjogTmV3IHRhcmdldCAnaGVhZGVycycuIEZhaWx1cmUgaWdub3JlZC4KCSogYWNjb25maWcuaDogTmV3IGRlZmluZXMgZm9yIHg4Ni02NC4KCSogY29uZmlndXJlLmluOiBEaXR0by4KCSogZGVmcy5oOiBEaXR0by4KCSogZmlsZS5jOiBEaXR0by4KCSogc2lnbmFsLmM6IERpdHRvLgoJKiBwcm9jZXNzLmM6IEFkZGVkIHN1cHBvcnQgZm9yIHg4Ni02NC4KCSogdXRpbC5jOiBEaXR0by4KCSogc3lzY2FsbC5jOiBEaXR0byArIGFkZGVkIGF1dG9tYXRpYyBwZXJzb25hbGl0eSBzd2l0Y2hpbmcuCgkqIGxpbnV4L3N5c2NhbGwuaDogRGl0dG8uCgkqIGxpbnV4L3g4Nl82NDogTmV3IGRpcmVjdG9yeS4KCSogbGludXgveDg2XzY0L01ha2VmaWxlLmluOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L2dlbnRhYi5wbDogRGl0dG8uCgkqIGxpbnV4L3g4Nl82NC9pMzg2LWhlYWRlcnMuZGlmZjogRGl0dG8uCgkqIGxpbnV4L3g4Nl82NC9tYWtlaGVhZGVycy5zaDogRGl0dG8uCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IERpdHRvLgoJKiBtZW0uYyAocHJpbnRfbW1hcCk6IEFsd2F5cyBwcmludCBhcmdbNF0gYXMgaW50LgoKMjAwMi0wOS0yMyAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCgkqIGNvbmZpZ3VyZS5pbjogRml4IHJlZ3VsYXIgZXhwcmVzc2lvbnMuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkZWQgbWlzc2luZyBicmFjZXMgaW4gcHJvdG90eXBlIG9mCglzeXNfZ2V0ZGVudHM2NCgpLgoJKiBmaWxlLmM6IFVzZSAnI2lmZGVmIExJTlVYJyBpbnN0ZWFkIG9mICcjaWZkZWYgbGludXgnLgoJKHN0cnVjdCBmaWxlZmxhZ3MpOiBNYWRlIGV4dGVybiB0byBpbmhpYml0IGNvbXBpYXRpb24gd2FybmluZ3MuCgkoc3lzX2dldGRlbnRzNjQpOiBNZXJnZWQgTElOVVggYW5kIFNWUjQgcGFydC4KCSogc3lzY2FsbC5jIChnZXRfc2Nubyk6IFNwbGl0IG11bHRpbGluZSBzdHJpbmcgaW50byB0d28gZGlzdGluY3QKCXN0cmluZ3MuCgoyMDAyLTA1LTI0ICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdHJlYW0uaCwgbmV0Lmg6IEF2b2lkIHBvc3NpYmxlIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5Cgl1bnNpZ25lZCBhcml0aG1ldGljIGluIHByZWNlZWRpbmcgY2hhbmdlLgoKMjAwMi0wNS0yMyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogYWNjb25maWcuaDogQWRkIEhBVkVfT1BUSERSIGFuZCBIQVZFX1RfT1BUSERSIGRlZmluZXMuCgoJKiBhY2xvY2FsLm00OiBBZGQgdGVzdHMgZm9yIHN0cnVjdCBvcHRoZHIgaW4gc3lzL3NvY2tldC5oIGFuZAoJc3RydWN0IHRfb3B0aGRyIGluIHN5cy90aXVzZXIuaCwgZGVmaW5lIEhBVkVfT1BUSERSIGFuZCBIQVZFX1RfT1BUSERSCglpZiBmb3VuZC4KCgkqIGNvbmZpZ3VyZS5pbjogdXNlIHRlc3RzIGZvciBzdHJ1Y3Qgb3B0aGRyIGFuZCBzdHJ1Y3QgdF9vcHRoZHIuCgoJKiBkZWZzLmg6IGFkZCBuZXcgZnVuY3Rpb24gcHJpbnRfc29ja19vcHRtZ210LgoKCSogaW8uYzogYWRkIGhhY2sgdGhhdCBsZXRzIGlvY3RsIGRlY29kZSBmdW5jdGlvbnMgc2V0IGF1eGlsbGlhcnkKCXN0cmluZyByZXR1cm4uCgoJKiBzdHJlYW0uYzogYmV0dGVyIGRlY29kaW5nIGZvciB0aW1vZCBpb2N0bHMuCgoJKiBuZXQuYzogYWRkIGZ1bmN0aW9uIHByaW50X3NvY2tfb3B0bWdtdCwgdXNlZCBieSB0aW1vZCBpb2N0bAoJZGVjb2RpbmcgZnVuY3Rpb25zIGluIHN0cmVhbS5jLgoKMjAwMi0wNS0yMyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogYWNjb25maWcuaDogTWFrZSBhdXRvaGVhZGVyIGhhcHB5IGFib3V0IExpbnV4L1N1cGVySAoKMjAwMi0wNS0yMyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3RyYWNlLmM6IEdldCByaWQgb2Ygd2FybmluZyBpZiBub3QgdXNpbmcgUE9MTF9IQUNLCgoyMDAyLTA1LTIyICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBuZXQuYzogU2ltcGxpZnkge2dldCxzZXR9c29ja29wdCwgZGVjb2RlIFNPX0xJTkdFUiwgY29wZSB3aXRoCglvcHRpb25zIHRoYXQgYXJlIG5vdCBqdXN0IGludHMsIGNvcGUgd2l0aCBzeXN0ZW1zIHRoYXQgZG9uJ3QKCSNkZWZpbmUgU09MX1RDUCBhbmQgc28gb24uCgoyMDAyLTA1LTIxICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdHJhY2UuYzogRml4IHdhcm5pbmcgaWYgUE9MTF9IQUNLIGlzIHVzZWQuCgoyMDAyLTA1LTE3ICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdnI0L2lvY3RsZW50LnNoOiBTb21lIGRlZmluZXMgb24gVVcgY29tZSB3aXRoIHRvbyBtYW55IHNwYWNlcy4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN2cjQvaW9jdGxlbnQuc2g6IENvcGUgd2l0aCAjZGVmaW5lcyB3cmFwcGVkIGluICNpZmRlZnMuCgoyMDAyLTA1LTE3ICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdHJlYW0uYzogdGlkeSB1cCBvdXRwdXQgYSBsaXR0bGUuCgoyMDAyLTA1LTE3ICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBwcm9jZXNzLmMsIHN2cjQvZHVtbXkuaCwgc3ZyNC9zeXNjYWxsLmg6IGRlY29kZSBhcmd1bWVudHMKCXRvIHByb2Nwcml2IHN5c2NhbGwuCgoyMDAyLTA1LTAxICBXaWNoZXJ0IEFra2VybWFuIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRlZnMuaCwgcHJvY2Vzcy5jLCBzb2NrLmMsIHN5c2NhbGwuYywgdXRpbC5jOiBtZXJnZQoJICBwYXRjaCBmcm9tIEdyZWcgQmFua3MgPGdiYW5rc0Bwb2NrZXRwZW5ndWlucy5jb20+IGZvciBMaW51eC9TdXBlckgKCSAgc3VwcG9ydAoKMjAwMi0wNC0wMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogc3RyYWNlLmM6IGNsb3NlIHRjcC0+b3V0ZiBpbiBkcm9wdGNiKCkKCjIwMDItMDQtMDEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIG5ldC5jOiBkZWNvZGUgcGFja2V0IG9wdGlvbnMKCjIwMDItMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIGxpbnV4L3thbHBoYSxocHBhLGlhNjQsbWlwcyxwb3dlcnBjLHNwYXJjfS9zeXNjYWxsZW50Lmg6IHJlZ2VuZXJhdGVkCgoyMDAyLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBkZWJpYW4vKjogYWRkZWQKCSogbGludXgvc3lzY2FsbGVudC5oOiBmaXggdHlwbyBhbmQgYWRkIHRoZSByZXNlcnZlZCBzdHJlYW0gc3lzY2FsbHMKCSogZGVmcy5oLCBmaWxlLmMsIGlvLmM6IGZpeCBzaWduZWQvdW5zaWduZWQgaXNzdWVzCgkqIHN5c2NhbGwuYzogY2hlY2sgZm9yIG5lZ2F0aXZlIHVfZXJyb3JzCgkqIGN2c2J1aWxkOiByZW5hbWVkIHRvIGF1dG9nZW4uc2gKCjIwMDEtMTItMTcgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgoJKiBuZXQuYzogYWRkIG5ldyBUQ1Agc29ja2V0IG9wdGlvbnMKCjIwMDEtMTAtMjYgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN2cjQvaW9jdGxlbnQuc2g6IENvcGUgd2l0aCAjZGVmaW5lIGxpbmVzIGNvbnRhaW5pbmcKCWNvbW1lbnRzIHRoYXQgdGVybWluYXRlIG9uIHN1YnNlcXVlbnQgbGluZXMuICBVc2VkIHRvCgljb21tZW50IG91dCBzdWJzZXF1ZW50IGlvY3RscyEKCjIwMDEtMTAtMjUgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgoJKiBsaW51eC9pb2N0bGVudC5oOiByZWdlbmVyYXRlZCB1c2luZyBjdXJyZW50IHNjcmlwdHMgc28KCSAgdGVybSBpb2N0bHMgYXJlIGluY2x1ZGVkCgoyMDAxLTEwLTE5ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogc3RyYWNlLmMocHJvY19vcGVuKTogT24gU1ZSNCBvbmx5IHRyYWNlIHRoZSBzeXNjYWxscywKCXNpZ25hbHMgYW5kIGZhdWx0cyB3ZSBjYXJlIGFib3V0LgoKMjAwMS0xMC0xOCAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIGFjY29uZmlnLmg6IEFkZCBIQVNfU0lHSU5GT19ULgoJKiBhY2xvY2FsLm00OiBhZGQgY2hlY2sgZm9yIHNpZ2luZm9fdCBpbiBzaWduYWwuaC4KCSogY29uZmlndXJlLmluOiB1c2UgY2hlY2sgZm9yIHNpZ2luZm9fdC4KCSogZGVmcy5oOiBpZiBIQVZFX1NJR0lORk9fVCB0aGUgZGVjbGFyZSBwcmludHNpZ2luZm8uICBPbiBTVlI0CgkgIGFsbG93IGFjY2VzcyB0byBzaWdpbmZvIHdoZW4gc2lnbmFsIHJlY2lldmVkLgoJKiBwcm9jZXNzLmM6IFJlbW92ZSBTVlI0IG9ubHkgdmVyc2lvbiBvZiBwcmludHNpZ2luZm8uCgkqIHNpZ25hbC5jOiBtZXJnZSBTVlI0IGFuZCBMSU5VWCB2ZXJzaW9ucyBvZiBwcmludHNpZ2luZm8uCgkqIHN0cmFjZS5jOiBvbiBTVlI0IHByaW50IHNpZ2luZm8gd2hlbiBzaWduYWwgcmVjaWV2ZWQuCgoyMDAxLTEwLTE4ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogc3lzdGVtLmMoc3lzX3NzaXN5cyk6IGhhbmRsZSByZXR1cm4gdmFsdWVzIGZvciBzc2lzeXMKCjIwMDEtMTAtMTggIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBzaWduYWwuYzogaGFuZGxlIHNpZ3dhaXQKCSogc3ZyNC9kdW1teS5jOiBNb3ZlIHNpZ3dhaXQgdG8gZG9uZQoJKiBzdnI0L3N5c2NhbGwuaDogaGFuZGxlIHNpZ3dhaXQKCjIwMDEtMTAtMTYgIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBzeXN0ZW0uYyhzeXNfc3Npc3lzKTogZGVjb2RlIHNvbWUgYXJncyBmb3Igc3Npc3lzLgoKMjAwMS0xMC0xNiAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIG1lbS5jOiBNU19TWU5DIGlzIHplcm8sIHNvIG11c3QgYmUgZmlyc3QgaW4geGxhdCBsaXN0LgoKCSogc3ZyNC9kdW1teS5oOiBtZW1jbnRsIGlzIG11Y2ggbGlrZSBtY3RsLgoKMjAwMS0xMC0xNiAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHV0aWwuYyAodW1vdmVzdHIpOiBVbml4V2FyZSAoc3ZyND8pIHJldHVybnMgMCB3aGVuIHRyeWluZwoJdG8gcmVhZCB1bm1hcHBlZCBwYWdlLiAgTWFrZSBpdCBwb3NzaWJsZSB0byBzdHJhY2Uga3NoLgoKMjAwMS0xMC0wMyAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKTogQXZvaWQgcmFjZSBjb25kaXRpb24gYnkgY2xlYXJpbmcKCWJyZWFrcG9pbnQgYWZ0ZXIgYXR0YWNoaW5nIHRvIGNoaWxkLgoKMjAwMS0xMC0wMiAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogRGVmaW5lIGlhMzIgc3lzY2FsbCBudW1iZXJzIChvcmlnaW5hbGx5CglieSBEb24gRHVnZ2VyLCB3aXRoIG15IHJlZmluZW1lbnRzKS4KCgkqIGxpbnV4L2lhNjQvaW9jdGxlbnQuaDogUmVnZW5lcmF0ZSBhbmQgbWFudWFsbHkgbWVyZ2UgY29uZmxpY3RpbmcKCWlvY3RscyAoVENHRVRTICYgU05EQ1RMX1RNUl9USU1FQkFTRSwgZXRjLikuCgoJKiBsaW51eC9pYTY0L01ha2VmaWxlLmluIChpb2N0bGRlZnMuaCBpb2N0bHMuaCk6IFVwZGF0ZSBmb3IKCW5ldyBpb2N0bGVudC5oIGdlbmVyYXRpb24gc2NoZW1lLgoKCSogbGludXgvc3lzY2FsbC5oIChzeXNfY2xvbmUyKTogRGVjbGFyZS4KCVtJQTY0XSBEZWZpbmUgaWEzMiBzb2NrZXQsIGlwYywgYW5kIGV4dHJhIHN5c2NhbGwgbnVtYmVycy4KCgkqIGxpbnV4L2lvY3RsZW50LnNoIChyZWdleHApOiBBbHNvIGhhbmRsZSA8YXNtL2lvY3Rscy5oPiBzbyB3ZQoJZG9uJ3QgbWlzcyB0aGUgdHR5IGlvY3RscyAodW5mb3J0dW5hdGVseSwgc29tZSBvZiB0aGUgc291bmQgdGltZXIKCWlvY3RscyBhcmUgaW4gY29uZmxpY3Qgd2l0aCB0aGVtISkuCgoJKiB1dGlsLmMgKHNldGJwdCkgW0lBNjRdOiBBZGQgaWEzMiBzdXBwb3J0IChieSBEb24gRHVnZ2VyKS4KCShjbHJicHQpIFtJQTY0XTogRGl0dG8uCgoJKiBzeXNjYWxsLmMgKGludGVybmFsX3N5c2NhbGwpOiBIYW5kbGUgU1lTX2Nsb25lMiwgU1lTMzJfd2FpdDQsCglhbmQgU1lTMzJfZXhpdC4KCShnZXRfc2Nubyk6IEdldCBpYTMyIHN5c2NhbGwgbnVtYmVyIGZyb20gcjEgKG9yaWcgZWF4KSBpbnN0ZWFkIG9mCglyOCAoZWF4KS4gIEhhbmRsZSBUQ0JfV0FJVEVYRUNWRS4KCShzeXNjYWxsX2ZpeHVwKTogSGFuZGxlIGlhNjQuCgkoc3lzY2FsbF9lbnRlcik6IEZpeCBhcmd1bWVudCBmZXRjaGluZyBmb3IgaWE2NC4KCgkqIHN0cmFjZS5jIFtJQTY0ICYmIExJTlVYXTogSW5jbHVkZSA8YXNtL3B0cmFjZV9vZmZzZXRzLmg+LgoJKHRyYWNlKSBbUFRfR0VUU0lHSU5GT106IFByaW50IHNpZ25hbCBhZGRyZXNzIGFuZCBwYyBpZiBwb3NzaWJsZS4KCgkqIHByb2Nlc3MuYyAodGNwKTogTmV3IGZ1bmN0aW9uLgoJKGNoYW5nZV9zeXNjYWxsKTogQWRkIHN1cHBvcnQgZm9yIGlhNjQgbGludXguCgkoc3lzX2V4ZWN2ZSk6IFR1cm4gb24gVENCX1dBSVRFWEVDVkUgZm9yIGlhNjQgbGludXguCgoJKiBkZXNjLmMgKGdldGxrKTogQ2FzdCBsX2xlbiB0byAibG9uZyBsb25nIiB0byBhdm9pZCB3YXJuaW5ncyB3aGVuCgl0eXBlIGlzIG5hcnJvd2VyLgoJKiByZXNvdXJjZS5jIChzcHJpbnRybGltNjQpOiBEaXR0by4KCgkqIGRlZnMuaCAoVENCX1dBSVRFWEVDVkUpIFtJQTY0XTogRGVmaW5lLgoJW0lBNjRdOiBEZWNsYXJlICJpYTMyIiB2YXJpYWJsZS4KCgkqIGJqbS5jOiBEbyBub3QgaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+LiAgSXQncyBub3Qgc2FmZSB0byBpbmNsdWRlCglrZXJuZWwgaGVhZGVycy4gIERlY2xhcmUgdGhlIG5lY2Vzc2FyeSBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMKCWRpcmVjdGx5IGluc3RlYWQuCgoyMDAxLTEwLTAxICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIHNpZ25hbC5jIChwYXJzZV9zaWdzZXRfdCk6IE5ldyBmdW5jdGlvbi4KCShzaWdpc2hhbmRsZWQpOiBGaXggb2ZmLWJ5LW9uZSBidWcgYnkgdXNpbmcgcGFyc2Vfc2lnc2V0X3QoKSBhbmQKCWF2b2lkaW5nIHJlbHlpbmcgb24gaW50ZXJuYWwgbGF5b3V0IG9mIHNpZ3NldF90IGRhdGFzdHJ1Y3R1cmUuCgoyMDAxLTA0LTI2ICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBBZGQgZ2V0dW53aW5kKCkuCgoyMDAxLTA0LTExICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIHN5c2NhbGwuYyAoc3lzY2FsbF9lbnRlcik6IFVzZSBQVF9SQlNfRU5EIGluc3RlYWQgb2YgZGVwcmVjYXRlZAoJUFRfQVJfQlNQLiAgUGljayB1cCBhcmd1bWVudHMgc3RhcnRpbmcgd2l0aCBvdXQwLCB3aGljaCBpcyBub3QKCWFsd2F5cyB0aGUgc2FtZSBhcyByMzIgKGUuZy4sIGNvbnNpZGVyIGlubGluZWQgc3lzY2FsbHMpLgoKMjAwMS0wOS0yOCAgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBwcm9jZXNzLmM6IEZyZWVCU0QtQ1VSUkVOVCBubyBsb25nZXIgaGFzIFBUX1JFQURfVSwgYW5kIGFueXdheSB3ZQogICAgd2VyZSBzaG93aW5nIGl0IGFzIFBUX1dSSVRFX1UhICBGaXggZnJvbSBNYXhpbWUgSGVucmlvbi4KCjIwMDEtMDktMTggICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogbmV0LmM6IGZpeCBkaXNwbGF5IG9mIHNvY2thZGRyIHN0cnVjdHVyZXMsIHNvbWV0aW1lcyB0b28gbWFueSAifSIsCiAgICBzb21ldGltZXMgdG9vIGZldy4gIEZpeCBzdWdnZXN0ZWQgYnkgUmljaGFyZCBLZXR0bGV3ZWxsLgoKMjAwMS0wOC0xOSAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogc2lnbmFsLmM6IGRvIG5vdCBpbmNsdWRlIGFzbS9zaWdjb250ZXh0Lmggb24gSUE2NCBzaW5jZSBpdCBnZXRzCiAgICB0aGUgc3RydWN0IGZyb20gYml0cy9zaWdjb250ZXh0LmggYWxyZWFkeSB3aGljaCBzaWduYWwuaCBpbmNsdWRlcy4KCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2lvY3RsZW50LnNoOiBjaGFuZ2UgcmVnZXhwcyBzbyB3ZSBjYXRjaCBzb3VuZCBpb2N0bHMgYXMgd2VsbCBpbgogICAgTGludXgKICAqIGxpbnV4L01ha2VmaWxlLmluOiBmaXggYSBmZXcgdGhpbmdzIHNvIHRoZSBpb2N0bCBsaXN0IGlzIGdlbmVyYXRlZAogICAgcHJvcGVybHkKICAqIGlvY3RsLmM6IHJlbWVtYmVyIHRvIHNoaWZ0IGlvY3RsIG1hc2tzIGFzIHdlbGwKCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIExpbnV4LyoqL3N5c2NhbGxlbnQuaDogc3luY2hyb25pemUgc2VjdGlvbiBmb3IgZmNudGwgYW5kIHVzZSBzeXNfZmNudGwKICAgIGZvciBzeXNfZmNudGwgYXMgd2VsbAoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IHVwZGF0ZWQgZnJvbSBNYXR0aGV3IFdpbGNveAoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogcHJvY2Vzcy5jOiBzZWVtcyBMaW51eC9JQTY0IGNoYW5nZWQgcmVnaXN0ZXIgbmFtZXMgb24gdXMsIHN3aXRjaCB0bwogICAgdXNpbmcgbmV3IG5hbWVzLgoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogc3RyYWNlLmM6IHNldCBDTE9FWEVDICBmbGFnIGZvciBvdXRwdXRmaWxlCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9zcGFyYy9zeXNjYWxsLmgsIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogYWRkIHNvbWUgTEZTIGNhbGxzCgoyMDAxLTA3LTIzICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZ3VyZS5pbjogU3VwcG9ydCBjcm9zcy1jb21waWxpbmcgYmV0d2VlbiBhcmNoaXRlY3R1cmVzCgoyMDAxLTA3LTEzICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZ3VyZS5pbjogYWRkIFMzOTAgdG8gYXJjaGl0ZWN0dXJlIGxpc3QKCjIwMDEtMDctMTAgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBUT0RPLCBkZWZzLmgsIGlvLmgsIG5ldC5jLCBzdHJhY2UuYywgc3lzY2FsbC5jLCB1dGlsLmM6IE1lcmdlIGZpeGVzCiAgICBmcm9tIFJpY2hhcmQgS2V0dGxld2VsbCA8cmtldHRsZXdlbGxAemV1cy5jb20+IHdoaWNoIGFkZCBJL08gZHVtcGluZwogICAgb2YgYXJncyB0byByZWFkdi93cml0ZXYuICBBbHNvIGdldHMgcmlkIG9mIHJlZHVuZGFudCBwcmludGlvdmVjCiAgICByb3V0aW5lIGZyb20gbmV0LmMgKGR1cGxpY2F0ZSBvZiB0cHJpbnRfaW92IGluIHV0aWwuYykuCgoyMDAxLTA3LTAyICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZy57Z3Vlc3Msc3VifTogdXBkYXRlZAoKMjAwMS0wNS0xNSAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHNpZ25hbC5jOiBwYXNzIGEgcG9pbnRlciB0byBzaWdtYXNrIHRvIHByaW50c2lnbWFzayBmcm9tIHByaW50Y29udGV4dCwKICAgIGl0IHdhcyBqdXN0IHBhc3NpbmcgdGhlIHNpZ21hc2sgKHVjcC0+dWNfc2lnbWFzaykuCgoyMDAxLTA1LTE1ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogdXRpbC5jOiBEb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgdmFsaWQgbWVtb3J5IGluIHVtb3Zlc3RyIHdoZW4KICAgIFVTRV9QUk9DRlMuICBJbXBvcnRhbnQgZm9yIEZSRUVCU0Qgc3lzdGVtcyAod2hpY2ggc2VlbSB0byBoYXZlIGFuCiAgICB1bm1hcHBlZCBwYWdlIGp1c3QgYWZ0ZXIgdGhlIGFyZ3MvZW52IGFyZWEpLgoKMjAwMS0wNC0xOCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGNvbmZpZ3VyZS5pbjogdGVzdCBmb3Igc3lzL25zY3N5cy5oLCB0aGUgbm9uLXN0b3AgY2x1c3RlcnMgaW5jbHVkZXMuCiAgKiBwcm9jZXNzLmM6IGhhbmRsZSByZm9ya3sxLGFsbH0gYW5kIHJleGVjdmUgY2FsbHMgb24gbm9uLXN0b3AgY2x1c3RlcnMuCiAgKiBzeXNjYWxsLmM6IHRyZWF0IHJmb3JrezEsYWxsfSBhbmQgZm9ya3sxLGFsbH0gYXMgZm9yayBsaWtlIGNhbGxzLgogICAgVHJlYXQgcmV4ZWN2ZSBhcyBhbiBleGVjLgogICogc3lzdGVtLmM6IGRlY29kZSBhcmd1bWVudHMgdG8gc3Npc3lzIGNhbGwgb24gbnNjIHN5c3RlbXMuCiAgKiBzdnI0L2R1bW15LmgsIHN2cjQvc3lzY2FsbC5oOiBub3cgd2UgaGFuZGxlIHJmb3JrezEsYWxsfSwgc3Npc3lzIGFuZAogICAgcmV4ZWN2ZSBjYWxscy4KCjIwMDEtMDQtMTIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogcHJvY2Vzcy5jOiBmaXggY2FzdCBmb3IgcG93ZXJwYyBjb2RlCiAgKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogdXBkYXRlIHN5c2NhbGwgbGlzdAogICogUkVBRE1FOiBmaXggYWRkcmVzcyBmb3IgdGhlIHN0cmFjZSBtYWlsaW5nbGlzdAogICogc2lnbmFsLmM6IHN3aXRjaCB0byB1c2luZyAvcHJvYy88cGlkPi9zdGF0dXMgb24gTGludXggc28gd2UgY2FuIGdldAogICAgdGhlIHJlYWx0aW1lIHNpZ25hbHMgYXMgd2VsbAoKMjAwMS0wNC0xMCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaGVzIGZyb20gTWFjaWVqIFcuIFJvenlja2k6CiAgICArIHV0aWwuYzogYWRkIGNvZGUgdG8gcHJpbnQgUEMgZm9yIE1JUFMKICAgICsgbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IHVwZGF0ZWQKICAgICsgc3lzdGVtLmM6IGZvcm1hdGluZyBmaXhlcyBmb3Igc3lzX3N5c21pcHMKICAgICsgY29uZmlndXJlLmluOiB0ZXN0IGZvciB5ZXQgbW9yZSBoZWFkZXJzCiAgICArIHN0cmVhbS5jOiB1c2UgY29uZmlndXJlLWhlYWRlcnRlc3RzIGluc3RlYWQgb2YgcmVseWluZyBvbiBPUyBoaW50cwoKMjAwMS0wNC0wNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBORVdTOiBzdGFydCA0LjMuMSBpdGVtcwogICogdmVyc2lvbi5jOiB1cGRhdGVkIHRvIHNheSA0LjMuMSAod2FzIHN0aWxsIDQuMiwgb29wcyEpCgoyMDAxLTA0LTA3ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZ3VyZS5pbjogdGVzdCBmb3IgYXNtL3N5c21pcHMuaCBhbmQgbGludXgvdXRzbmFtZS5oCiAgKiBsaW51eC9zeXNjYWxsLmg6IGZpeCBhIHR5cG8gZm9yIHN5c19zeXNtaXBzCiAgKiBzeXN0ZW0uYzogaW5jbHVkZSBhc20vc3lzbWlwcy5oIGFuZCBsaW51eC91dHNuYW1lLmggaWYgdGhleSBleGlzdCwKICAgIGZpeCB0eXBvCgoyMDAxLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaWE2NC9pb2N0bGVudC5oOiByZWdlbmVyYXRlZAoKMjAwMS0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC97YWxwaGEsaWE2NCxwb3dlcnBjfS9pb2N0bGVudC5zaDogcmVtb3ZlZCwgYWxsIGFyY2hzIHVzZSB0aGUKICAgIGdlbmVyYWwgTGludXggaW9jdGxlbnQuc2gKCjIwMDEtMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaW9jdGxlbnQuc2g6IGFkZCBkaXIgdmFyaWFibGUgZm9yIGxvY2F0aW9uIG9mIGtlcm5lbCBoZWFkZXJzCgoyMDAxLTAzLTI5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2lhNjQvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvcG93ZXJwYy9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9ocHBhL2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTI5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2FscGhhL2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTI4ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZ3VyZS5pbjogdXNlIHNwYXJjKiBzbyB3ZSBjYW4gY29tcGlsZSBvbiBzcGFyYzY0IGFzIHdlbGwKICAqIHByb2Nlc3MuYywgc3lzY2FsbC5jOiB3b3JrIGFyb3VuZCBkb3VibGUgZGVmaW5lIG9mIGZwcSwgZnEgYW5kIGZwdQogICAgc3RydWN0cyBvbiBMaW51eC9zcGFyYywgYW5kIHVzZSByZWdzIGluc3RlYWQgb2YgcHRfcmVncwogICogZG9uJ3QgdXNlIGFzbS9zaWdjb250ZXh0Lmggb24gTGludXgvc3BhcmMKCjIwMDEtMDMtMjggIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvc3BhcmMvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjggIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogc3RyYWNlLmM6IHVzZSBfX1dBTEwgYXMgd2FpdDQgZmxhZyBpZiBpdCBleGlzdHMgc28gd2UgY2FuIHByb3Blcmx5CiAgICB0cmFjZSB0aHJlYWRlZCBwcm9ncmFtcwoKMjAwMS0wMy0yNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGFjbG9jYWwubTQ6IGFkZCBjaGVjayBmb3IgZW5kaWFubmVzcyBvZiBsb25nIGxvbmcuCiAgKiBhY2NvbmZpZy5oOiBhZGQgI2RlZmluZSBmb3IgTElUVExFX0VORElBTl9MT05HX0xPTkcuCiAgKiBjb25maWd1cmUuaW46IGNoZWNrIGZvciBlbmRpYW5uZXNzIG9mIGxvbmcgbG9uZy4KICAqIGRlZnMuaDogY2hhbmdlIExPTkdfTE9ORyBtYWNybyB0byB3b3JrIHdpdGggZWl0aGVyIGVuZGlhbm5lc3Mgb2YKICAgIGxvbmcgbG9uZy4KCjIwMDEtMDMtMjcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBuZXQuYzogTWFrZSBjb21waWxhYmxlIGJ5IFNDTyBVREsgY29tcGlsZXIgKGRvZXNuJ3QgbGlrZSBlbXB0eQogICAgaW5pdGlhbGlzYXRpb24gbGlzdCBmb3IgYXJyYXkpLgoKMjAwMS0wMy0yNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHN2cjQvc3lzY2FsbGVudC5oOiBudHBfYWRqdGltZSBlbnRyeSB3YXMgZHVwbGljYXRlZCBvbiBTb2xhcmlzCiAgICBzeXN0ZW1zIC0gYmFkIG1lcmdlIG9mIEhhcmFsZCBCb2VobWUncyBwYXRjaCBieSBtZS4KCjIwMDEtMDMtMjcgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbG90cyBvZiBmaWxlczogYWRkIExpbnV4L2hwcGEgc3VwcG9ydAoKMjAwMS0wMy0xOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogd2UgY2FuJ3QgaGF2ZSAtMSBuYXJncywgY2hhbmdlIHRvIDAKICAqIGxpbnV4L3N5c2NhbGxlbnQuaDogbm90IHRoYXQgc3lzY2FsbHMgMjIwIGFuZCAyMjEgYXJlIHVzZWQgbm93CiAgKiBjb25maWcuZ3Vlc3M6IHVwZGF0ZWQKCjIwMDEtMDMtMTcgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaW9jbHNvcnQuYzogbmV3IGZpbGUKICAqIGxpbnV4L2lvY3RsZW50LnNoOiBjb21wbGV0ZSByZXdyaXRlIHRvIHVzZSBhIG1vcmUgc2FuZSBhcHByb2FjaCB0byBnZXQKICAgIHRoZSBpb2N0bCBsaXN0IHRoYXQgZG9lc24ndCBpbnZvbHZlIGF0dGVtcHRpbmcgdG8gI2luY2x1ZGUgYWxsIGtlcm5lbAogICAgaGVhZGVycwogICogbGludXgvLmN2c2lnbm9yZTogYWRkZWQgaW9jdGRlZnMuaCBhbmQgaW9jdGxzLmggd2hpY2ggYXJlIGdlbmVyYXRlZAogICAgYnkgdGhlIG5ldyBpb2N0bGVudC5zaAogICogaW9jdGwuYzogb25seSBsb29rIGF0IHRoZSBudW1iZXIgYW5kIHR5cGUgYml0cyBmb3IgbGludXgsIHNpbmNlCiAgICBpb2N0bGVudC5zaCBubyBsb25nZXIgc3VwcGxpZXMgdGhlIG90aGVycwoKMjAwMS0wMy0wOCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGZyZWVic2Qvc3lzY2FsbHMucGw6IE9uIEZyZWVCU0Qgd2UgbXVzdCBjb3BlIHdpdGggQ09NUEFUaWJpbGl0eSBzeXNjYWxscywKICAgIHByZXRlbmQgdGhleSBoYXZlIG5hbWVzIGVuZGluZyB3aXRoICI/IiBzbyB0aGF0IC1lIHRyYWNlPXN0YXQgKGZvcgogICAgZXhhbXBsZSkgd2lsbCB3b3JrLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaDogYWRkID8gdG8gY29tcGF0YWJpbGl0eSBzeXNjYWxscy4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsLmg6IGNvbnNpc3RlbmN5LgoKMjAwMS0wMy0wOCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGFjY29uZmlnLmg6IGFkZCBuZXcgU1RfeHh4IGRlZmluZXMuCiAgKiBhY2xvY2FsLm00OiBtYWNyb3MgdG8gY2hlY2sgZm9yIG1vcmUgZmllbGRzIGluIHN0cnVjdCBzdGF0LgogICogY29uZmlndXJlLmluOiB1c2UgbmV3IG1hY3JvcyB0byBjaGVjayBmb3IgZmllbGRzIGluIHN0cnVjdCBzdGF0LgogICogZmlsZS5jOiB1c2UgbmV3IGRlZmluZXMgdG8gcmVwbGFjZSAjaWZkZWYgRlJFRUJTRCBieSAjaWYgSEFWRV9TVF94eHguCgoyMDAxLTAzLTA4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZGVmcy5oOiByZW5hbWUgd2ltcHkgZ2V0NjQgYXMgcG93ZXJmdWwgbmV3IExPTkdfTE9ORwogICogZmlsZS5jOiB1c2UgTE9OR19MT05HCiAgKiBpby5jOiB1c2UgTE9OR19MT05HCiAgKiBtZW0uYyB1c2UgTE9OR19MT05HCgoyMDAxLTAzLTA4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNjb25maWcuaDogbmV3ICNkZWZpbmVzIEhBVkVfTE9OR19MT05HX09GRl9UIGFuZCBIQVZFX0xPTkdfTE9OR19STElNX1QuCiAgKiBhY2xvY2FsLm00OiByb3V0aW5lcyB0byBjaGVjayBmb3IgbG9uZyBsb25nIG9mZl90IGFuZCBybGltX3QuCiAgKiBjb25maWd1cmUuaW46IGNoZWNrIGZvciBsb25nIGxvbmcgb2ZmX3QgYW5kIHJsaW1fdC4KICAqIGRlc2MuYzogaWYgSEFWRV9MT05HX0xPTkdfT0ZGX1QgdHJlYXQgZmxvY2sgYXMgZmxvY2s2NAogICogZmlsZS5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB0cmVhdCBzdGF0LGxzdGF0LGZzdGF0IGFuZCBsc2VlayBhcyA2NAogICAgYml0IHZlcnNpb25zLgogICogaW8uYzogaWYgSEFWRV9MT05HX0xPTkdfT0ZGX1QgdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiBwcmVhZCBhbmQgcHdyaXRlLgogICogbWVtLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHVzZSA2NCBiaXQgdmVyc2lvbiBvZiBtbWFwCiAgKiByZXNvdXJjZS5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB1c2UgNjQgYml0IHZlcnNpb25zIG9mIGdldHJsaW1pdAogICAgYW5kIHNldHJsaW1pdC4KICAqIGZyZWVic2Qvc3lzY2FsbHMucHJpbnQ6IGRvbid0IGV4cGxpY2l0bHkgdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiBjYWxscywKICAgIG5vdyBkb25lIGF1dG9tYXRpY2FseSBmb3IgdXMuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbC5oOiBkaXR0by4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsZW50LmggZGl0dG8uCgoyMDAxLTAzLTA3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZGVzYy5jOiBPbiBGcmVlQlNEIGZsb2NrIHN0cnVjdHVyZSB1c2VzIDY0IGJpdCBvZmZzZXRzLgogICogZmlsZS5jOiBPbiBGcmVlQlNEIHVzZSBzdGF0NjQgYW5kIHBhbHMgaW5zdGVhZCBvZiBzdGF0LgogICogZnJlZWJzZC9zeXNjYWxscy5wcmludDogdXNlIHN0YXQ2NCwgbHN0YXQ2NCBhbmQgZnN0YXQ2NC4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsLmg6IGRpdHRvLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaDogZGl0dG8uCgoyMDAxLTAzLTA3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZmlsZS5jOiBtZXJnZSBtaXNzaW5nIHBhcnQgb2YgSGFyYWxkIEL2aG1lJ3Mgc29sYXJpcyBwYXRjaGVzLAogICAgd2FzIG9ubHkgZGVjbGFyaW5nIHN5c197c3RhdDY0LGxzdGF0NjQsZnN0YXQ2NH0gb24gbGludXghCgoyMDAxLTAzLTA3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc3ZyNC9kdW1teS5oOiBmaXggbXVsdGlwbGUgZGVmaW5lIHdhcm5pbmcgb24gbm9uIExGUzY0IHN5c3RlbXMuCiAgKiBzdnI0L3N5c2NhbGxlbnQuaDogcHJlYWQvcHdyaXRlIGFyZSBURiBjYWxscy4KCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBkZWZzLmg6IGFkZCBBTElHTjY0IG1hY3JvIHRvIGNvcGUgd2l0aCBGcmVlQlNEJ3Mgc3RyYW5nZSBpbnNpc3RlbmNlCiAgICBvbiBhbGlnbm1lbnQgZm9yIG9mZl90ICg2NCBiaXQpIGFyZ3VtZW50cy4gIEFsc28gc2ltcGxpZnkgZ2V0NjQgc28KICAgIHdlIGRvbid0IG5lZWQgdG8ga25vdyBlbmRpYW5uZXNzIG9mIGxvbmcgbG9uZy4KICAqIGZpbGUuYzogRnJlZUJTRCBub3cgdXNlcyA2NCBiaXQgdmVyc2lvbnMgb2YgbHNlZWssIHRydW5jYXRlLAogICAgZnRydW5jYXRlLCBhbGxvd3MgcmVkdWN0aW9uIGluIG51bXZiZXIgb2YgaG9ycmlkICNpZidzCiAgKiBpby5jOiBGcmVlQlNEIG5vdyB1c2VzIDY0IGJpdCB2ZXJzaW9ucyBvZiBwcmVhZCwgcHdyaXRlLgogICogbWVtLmM6IEZyZWVCU0Qgbm93IHVzZXMgNjQgYml0IHZlcnNpb24gb2YgbW1hcC4KICAqIGZyZWVic2Qvc3lzY2FsbHMucHJpbnQ6IHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgdmFyaW91cyBzeXNjYWxscy4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsLmg6IHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgdmFyaW91cyBzeXNjYWxscy4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsZW50Lmg6IHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgdmFyaW91cyBzeXNjYWxscy4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBmaWxlLmM6IEltcGxlbWVudCB0cnVuY2F0ZTY0IGFuZCBmdHJ1bmNhdGU2NAogICogc3ZyNC9kdW1teS5oOiBhZGQgZHVtbWllcyBmb3IgdHJ1bmNhdGU2NCBhbmQgZnRydW5jYXRlNjQgZm9yIG5vbgogICAgTEZTNjQgc3lzdGVtcy4KICAqIHN2cjQvc3lzY2FsbC5oOiBhZGQgZGVjbGFyYXRpb25zIGZvciB0cnVuY2F0ZTY0IGFuZCBmdHJ1bmNhdGU2NC4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBmcmVlYnNkL3N5c2NhbGxzLnBsOiBmaXggZm9yIEZyZWVCU0QgNC4xIChuZXcgb3B0aW9uYWwgZmllbGQgaW4KICAgIHN5c2NhbGwgbWFzdGVyIGZpbGUpLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHN5c2NhbGwuYzogZml4IGZvciBGcmVlQlNEIDQuMSAoU1lTX3NlbWNvbmZpZyBoYXMgZGlzYXBwZWFyZWQpLiAgQWxzbwogICAgemFwIGluY29ycmVjdCBzeXNjYWxsIHN1YmFyZyByYW5nZSBjaGVjay4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBjb25maWd1cmUuaW4sIGRlZnMuaCwgZGVzYy5jLCBmaWxlLmMsIGlvLmMsIG1lbS5jLCBuZXQuYywgcmVzb3VyY2UuYywKICAgIHNpZ25hbC5jLCBzeXNjYWxsLmMsIHN2cjQvZHVtbXkuaCwgc3ZyNC9zeXNjYWxsLmgsIHN2cjQvc3lzY2FsbGVudC5oOgogICAgbWVyZ2UgSGFyYWxkIEL2aG1lJ3Mgc29sYXJpcyBwYXRjaGVzIChfTEZTNjRfTEFSR0VGSUxFIGFuZCBrZXJuZWwgYWlvCiAgICBtb3N0bHkpLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGR1bW15Lmg6IGFkZCB1bmltcGxlbWVudGVkIFVXIHN5Y2FsbHMKICAqIHN5c2NhbGwuaDogd2UgY2FuIGRvIHNldHRpbWVvZmRheSBmb3IgVVcsIHdob3BlZSEKICAqIHN5c2NhbGxlbnQuaDogZml4IHVuaW1wbGVtZW50ZWQgVVcgc3lzY2FsbHMKCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBhY2xvY2FsLm00OiBsb29rIGZvciBwcl9zeXNjYWxsIGluIHByX2x3cCBpZiB3ZSBIQVZFX01QX1BST0NGUwogICogZGVmcy5oOiBhZGQgUFJfU1lTQ0FMTCB0byBhbGxvdyB1c2Ugb2YgcHJfbHdwLnByX3N5c2NhbGwgaWYgaXQgZXhpc3RzLgogICogc3lzY2FsbC5jOiB1c2UgUFJfU1lTQ0FMTCBpbnN0ZWFkIG9mIHByX3N5c2NhbGwsIGZpeCB1cCBVbml4V2FyZSBjb2RlCiAgICBzbyBpdCBkb2Vzbid0IHRyeSB0byB1c2UgcHJfc3lzYXJnLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGFjbG9jYWwubTQ6IG9uIHN5c3RlbXMgb3RoZXIgdGhhbiBsaW51eCBsb29rIGZvciBzdGF0NjQgaW4gc3lzL3N0YXQuaAogICogZmlsZS5jOiBoYW5kbGUgeHN0YXQgdmVyc2lvbiBfU1RBVDY0X1ZFUiwgYWthIHN0YXQ2NC4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBuZXQuYzogbWFrZSBzdXJlIFNPTF8gb3B0aW9ucyBhcmUgZGVmaW5lZCBiZWZvcmUgdXNpbmcuCiAgKiBzaWduYWwuYzogZGVjbGFyZSBzaWdzZXQgdmFyaWFibGUsIG9ubHkgdXNlZCBvbiBsaW51eCwgaW5zaWRlICNpZmRlZi4KCjIwMDEtMDItMjEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbmV0LmM6IGZpeCBmb3JtYXQgZm9yIHByaW50aW5nIFVuaXggZG9tYWluIHNvY2tldHMKCjIwMDEtMDItMTkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IHVzZSBuZXcgc3lzX3N5c21pcHMKICAqIHN5c3RlbS5jOiBhZGQgc3lzX3N5c21pcHMgZGVjb2RpbmcKCjIwMDEtMDItMTYgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQ1JFRElUUzogYWRkIEFya2FkaXVzeiBNaXNraWV3aWN6IDxtaXNpZWtAcGxkLm9yZy5wbD4gd2hvCiAgICBzdWJtaXR0ZWQgdGhlIElQNiBzY29wZSBJRCB1cGRhdGVzCiAgKiBhY2NvbmZpZy5oOiBhZGQgSEFWRV9TSU42X1NDT1BFX0lEIGFuZCBIQVZFX1NJTjZfU0NPUEVfSURfTElOVVgKICAqIGFjbG9jYWwubTQ6IGFkZCBBQ19TSU42X1NDT1BFX0lEIHRvIGNoZWNrIGlmIHNpbjZfc2NvcGVfaWQgaXMKICAgIGF2YWlsYWJsZQogICogY29uZmlndXJlLmluOiBjaGVjayBmb3IgaWZfaW5kZXh0b25hbWUgZnVuY3Rpb24gYW5kIHNpbjZfc2NvcGVfaWQKICAqIG5ldC5jOiB0ZWFjaCBwcmludHNvY2sgYWJvdXQgSVA2IHNjb3BlIGlkcwoKMjAwMS0wMi0xNiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBjb25maWd1cmUuaW46IHRlc3QgZm9yIG5ldGluZXQvdGNwLmggYW5kIG5ldGluZXQvdWRwLmggZXhpc3RhbmNlCiAgKiBuZXQuYzogaW5jbHVkZSBuZXRpbmV0L3RjcC5oIGFuZCBuZXRpbmV0L3VkcC5oIGlmIHRoZXkgZXhpc3QKICAqIE1ha2VmaWxlLmluOiB1c2UgQG1hbmRpckAgYW5kIEBiaW5kaXJACgoyMDAwLTExLTI2ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqICBuZXQuYzogZml4IGZvcm1hdGluZyBlcnJvciBpbiBzeXNfc2V0c29ja29wdAogICogIG5ldC5jOiBhZGQgbGlzdCBvZiBzb2NrZXRsYXllcnMgYW5kIHVzZSB0aGF0IGZvciBbZ3NdZXRzb2Nrb3B0CgoyMDAwLTEwLTEyICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHRpbWUuYzogdXNlIHN5cy90aW1leC5oIHNvIHRoaW5ncyBjb21waWxlIHdpdGggMi4yIGtlcm5lbHMKICAqIHN0cmVhbS5jOiB0ZXN0IGlmIE1TR18qIGNvbnN0YW50cyBhcmUgI2RlZmluZWQKCjIwMDAtMDktMDMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogcHJvY2Vzcy5jOiBwZXJmb3JtIGJwdCB0cmljayBmb3IgY2xvbmUgYXMgd2VsbCBzbyB3ZSBjYW4gZ2V0IHRoZQogICAgcGlkIG9mIHRoZSBjaGlsZCBiZWZvcmUgaXQgc3RhcnRzIGRvaW5nIHNvbWV0aGluZwogICogZmlsZS5jOiByZW5hbWUgZGlyZW50NjQgc3RydWN0IHRvIGtlcm5lbF9kaXJlbnQ2NCBzbyB0aGluZ3MgY29tcGlsZQogICAgYWdhaW4gd2l0aCBuZXdlciBsaWJjcwogICogdGVzdC9jbG9uZS5jOiBpbXByb3ZlIG91ciB0ZXN0Y2FzZSBhIGJpdAogICogTWVyZ2UgYW5vdGhlciBwYXRjaCBmcm9tIEfkZWwgUm91YWxsYW5kIHdpdGggRnJlZUJTRCB1cGRhdGVzCgoyMDAwLTA5LTAxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxvdHMgb2YgZmlsZXM6IG1lcmdlIHBhdGNoIGZyb20gR2HrbCBSb3VhbGxhbmQgdG8gYWRkCiAgICBzdXBwb3J0IGZvciBGcmVlQlNELgoKMjAwMC0wOC0wOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBmaWxlLmM6IHVwZGF0ZSB0byByZWZsZWN0IHRoYXQgc3RfaW5vIHN1ZGRlbmx5IGJlY2FtZSBhIGxvbmcgbG9uZwogICAgaW4gdGhlIGluIExpbnV4IDIuNC4wLXRlc3Q2CgoyMDAwLTA4LTA5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHRlc3QvY2xvbmUuYzogbWlub3IgZml4dXAKICAqIEFub3RoZXIgYnVuY2ggb2YgcGF0Y2hlcyBmcm9tIEpvaG4gSHVnaGVzIG1lcmdlZDoKICAqIHNpZ25hbC5jOgogICAgKyBTVlI0IHByaW50Y29udGV4dCgpOiBzaWdzZXRfdCAhPSBzaWdzZXRfdCoKICAgICsgZ2V0Y29udGV4dCByZXR1cm5zIGEgdmFsdWUsIHNvIHByaW50IG9uIGV4aXQgb2Ygc3lzY2FsbAogICAgKyBhZGQgVUNfRlAgdG8gdWNvbnRleHRfZmxhZ3MgZm9yIE9TIHdyaXRlcnMgdGhhdCBjYW4ndCBzcGVsbAogICAgKyBzeXNfc2lnbmFsKCk6IHNwZWNpYWwgY2FzZSBTSUdfe0VSUixERkwsSUdOfQogICAgKyBkZWNvZGVfc3ViY2FsbCgpOiBvbmx5IGRvIHN1YmNhbGwgcmFuZ2UgY2hlY2tpbmcgd2hlbiBuZWVkZWQKICAqIGJ1bmNoIG9mIFVuaXhXYXJlIHVwZGF0ZXMKICAqIGFjbG9jYWwubTQsIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbjogYWRkIHRlc3QgZm9yIGxvbmcgbG9uZyB0eXBlCgoyMDAwLTA3LTA0ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIG5ldC5jOiBhZGQgU09MX1BBQ0tFVCBhbmQgU09MX1JBVyBzb2NrZXQgb3B0aW9ucywgdXBkYXRlCiAgICBTT0xfSVAgYW5kIFNPTF9UQ1AKCjIwMDAtMDYtMjMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogc3RyYWNlLmM6IGNsb3NlIG91dGYgYmVmb3JlIHdlIGV4ZWMgYSBjaGlsZCBwcm9jZXNzCgoyMDAwLTA2LTA5ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KCiAgKiBjb25maWd1cmUuaW46IERvbid0IGxpbmsgYWdhaW5zdCBsaWJuc2wgb24gTGludXgsIGl0J3MgdW5uZWNlc3NhcnkuCiAgKiBkZWZzLmggKHN0cnVjdCB0Y2IpOiBNYWtlIGF1eHN0ciBtZW1iZXIgY29uc3QuCiAgKiBmaWxlLmMgKGZzbWFnaWMpOiBBbmQgbWFueSBtb3JlIG1hZ2ljIG51bWJlcnMuCiAgKiB1dGlsLmM6IERvbid0IGluY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPiBmb3IgZ2xpYmMgMi4xIGFuZCB1cC4KCjIwMDAtMDQtMjYgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogZGVmcy5oOiBiYWxhbmNlICNpZi8jZW5kaWYgYWdhaW4KICAqIHN5c3RlbS5jOiBmaXggcmV0dXJuIHN0YXRlbWVudHMgaW4gc3lzX2NhcGdldCgpCiAgKiBNZXJnZSB1cGRhdGVzIGZyb20gVG9waSBNaWV0dGluZW4gPFRvcGkuTWlldHRpbmVuQG5pYy5maT46CiAgICArIGZpbGUuYzogYWRkIEZfW1NHXUVUU0lHIHRvIGZjbnRsIGZsYWdzCiAgICArIHN0cmFjZS5jOiBkb24ndCBzZXRyZVtndV1pZCBpZiBub3QgbmVlZGVkCiAgICArIHN5c3RlbS5jOiBoYW5kbGUgc3lzX3JlYm9vdCBmb3IgTGludXgKICAgICsgdGVybS5jOiBhZGQgYmF1ZHJhdGUgY29uc3RhbnRzIHVwIHRvIEI0MDAwMDAwCiAgICArIGxpbnV4LyoqL3N5c2NhbGxlbnQuaDogbm90ZSB0aGF0IG11bmxvY2thbGwgaGFzIG5vIGFyZ3VtZW50cwoKMjAwMC0wNC0yNSAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgogICogQ1JFRElUUzogZml4IGVtYWlsIGFkZHJlc3MKICAqIHByb2Nlc3MuYzogaGFuZGxlIFBSX1tHU11FVF9VTkFMSUdOIGFuZCBQUl9bR1NdRVRfS0VFUENBUFMKICAqIHNpZ25hbC5jOiBob25vdXIgb2Zmc2V0IG9mIHNpZ2NvbmZpZyBpbiBzaWdmcmFtZSBzdHJ1Y3R1cmUgZm9yCiAgICBMaW51eC9pYTY0CiAgKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogQWRkIHBlcmZtb25jdGwsIHBpdm90cm9vdCwgbWluY29yZSwgYW5kCiAgICBtYWR2aXNlIHN5c2NhbGxzLgogICogc3lzY2FsbC5jIChzeXNjYWxsX2VudGVyKTogV2l0aCBLZXZpbidzIGxhdGVzdCBwdHJhY2UgcGF0Y2hlcywKICAgIEFSX0JTUCBwb2ludHMgdG8gdGhlIF9lbmRfIG9mIHRoZSBhY3RpdmUgcmVnaXN0ZXIgZnJhbWUsIHNvIHdlIG5lZWQKICAgIHRvIGFkanVzdCBic3AgYnkgbW92aW5nIGl0IGJhY2sgYnkgdGhlIHNpemUgb2YgdGhlIGFjdGl2ZSBmcmFtZQogICAgYmVmb3JlIHVzaW5nIGl0LgoKMjAwMC0wNC0yNCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IGFkZCBzcGFyYyBzdXBwb3J0IHRvIGNoYW5nZV9zeXNjYWxsCgoyMDAwLTA0LTIyICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBmaXggc29tZSB0eXBvcwoKMjAwMC0wNC0xNCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogYWRkZWQgbmFtZXMgZm9yIFNWUjQsIFNZU1YsIEJTRDQuMyBhbmQgUE9TSVgKICAgIHN5c2NhbGxzCgoyMDAwLTA0LTEzICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGRlZnMuaDogTGludXgvTUlQUyB1c2VzIHN5c2NhbGxzIHVwIHRvID40aywgc28gc2V0IE1BWF9RVUFMUyB0bwogICAgNDk5OQoKMjAwMC0wNC0wOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBSRUFETUUtbGludXg6IHVwZGF0ZWQgdG8gbm90ZSB0aGF0IHN0cmFjZSBtaWdodCBub3QgY29tcGlsZQogICAgd2l0aCBkZXZlbG9wbWVudCBrZXJuZWxzCiAgKiBiam0uYzogc3lzX3F1ZXJ5X21vZHVsZTogY2hlY2sgaWYgbWFsbG9jIHN1Y2NlZWRzCiAgKiBzeXN0ZW0uYzogc3lzX2NhcFtnc11ldCgpOiBjaGVjayBpZiBtYWxsb2Mgc3VjY2VlZHMsIG9ubHkgbWFsbG9jIG9uY2UKICAqIGxpbnV4L3N5c2NhbGxlbnQuaDogdXBkYXRlZCBmb3IgMi4zLjk5cHJlMwogICogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oOiB1cGRhdGVkIGZvciAyLjMuOTlwcmUzLCBhZGQgYWxsIG9zZiBzeXNjYWxscwogICAgZXZlbiB0aG91Z2ggTGludXggZG9lc24ndCBpbXBsZW1lbnQgdGhlbQogICogc3lzY2FsbC5jOiBhZGQgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgTUlQUyByZWdpc3RlcnMgYXMgd2VsbAogICogc3lzY2FsbC5jOiBtb3ZlIGdsb2JhbCB2YXJpYWJsZXMgdG8gYmVmb3JlIGdldF9zY25vIHNpbmNlIHRoYXQgdXNlcyB0aGVtCiAgKiB1dGlsLmM6IG9vcHMsIG1pc3NwZWxsZWQgZGVmaW5lZAogICogcHJvY2Vzcy5jOiBmaXggcHRyYWNlIGNhbGxzIGluIGNoYW5nZV9zeXNjYWxsCiAgKiBtZW0uYzogZGVjb2RlIHN5c19tYWR2aXNlCiAgKiBNZXJnZSBwYXRjaCBmcm9tIFRvcGkgTWlldHRpbmVuIDxUb3BpLk1pZXR0aW5lbkBuaWMuZmk+CiAgICArIGFkZCBzdXBwb3J0IGZvciBxdW90YWN0bCwgZmRhdGFzeW5jLCBtbG9jaywgbWxvY2thbGwsIG11bmxvY2thbGwgJiBhY2N0CiAgICArIHNtYWxsIGZpeCBmb3IgUkxJTUlUXyogYW5kIFJVU0FHRV9CT1RICiAgICArIGVuaGFjZSBzdXBwb3J0IGZvciBjYXBnZXQgYW5kIGNhcHNldAoKMjAwMC0wMi0xOSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHRlc3QvdmZvcmsuYzogbmV3IGZpbGUgdG8gdGVzdCB2Zm9yayB0cmFjZXMKICAqIHRlc3QvLmN2c2lnbm9yZTogbmV3IGZpbGUKICAqIGRlZnMuaDogVXAgbWF4aW11bSBudW1iZXIgb2YgdHJhY2VkIHByb2Nlc3NlZCB0byA2NAogICogc3RyYWNlLmM6IERpc2FibGUgc29tZSBkZWJ1Z2dpbmcgY29kZSBmcm9tIGRhdmlkbQogICogaW1wbGVtZW50IHNldGFyZyBmb3IgbW9yZSBhcmNoaXRlY3R1cmVzCiAgKiBpbXBsZW1lbnQgY2hhbmdlX3N5c2NhbGwKCjE5OTktMTItMjcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBzeXNjYWxsLmMgKGxvb2t1cF9zaWduYWwsIGxvb2t1cF9kZXNjKTogaXNkaWdpdCByZXF1aXJlcyBhbgogCV91bnNpZ25lZF8gY2hhciBwYXJhbWV0ZXIuCgoyMDAwLTAyLTE0IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUzM5MCB1cGRhdGVzCgoyMDAwLTAyLTAzIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgTGludXgvaWE2NCBwYXRjaGVzCgoyMDAwLTAxLTAyIFBhdmVsIE1hY2hlawkgICAgIDxwYXZlbEB1Y3cuY3o+CgogICogcHJvYmUgaWYgc3lzL3BvbGwuaCBleGlzdHMgaW4gY29uZmlndXJlICsgbWlub3IgY2xlYW51cHMKCiAgKiBzeXNjYWxsLmM6IHNwbGl0IHRyYWNlX3N5c2NhbGwgaW50byBmZXcgcGllY2VzIHRvIG1ha2UgY29kZSByZWFkYWJsZQoKMjAwMC0wMS0yMSBXaWNoZXJ0IEFra2VybWFuICA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBSZWxlYXNlIHZlcnNpb24gNC4yIHRvIGdldCB0aGUgY3VycmVudCB1cGRhdGVzIG91dCBhbmQgc28KICAgIHdlIGNhbiBjb25jZW50cmF0ZSBpbiBmaW5pc2hpbmcgdGhlIGNsb25lIHN1cHBvcnQuCgoyMDAwLTAxLTExIFdpY2hlcnQgQWtrZXJtYW4gIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCAxOTAwIHRvIHRtX3llYXIgaW4gc3ByaW50dGltZQoKMTk5OS0xMi0yNCAgV2ljaGVydCBBa2tlcm1hbiAgPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogKiBmaWxlLmM6IHByb3RlY3QgcHJpbnRzdGF0NjQgd2l0aCBTVEFUNjQgaW5zdGVhZCBvZiBsaW51eCBzbyB3ZSBjYW4KICAgY29tcGlsZSBvbiBMaW51eCBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBpdAogKiB1dGlsLmM6IGZpeCBMT09QIGZvciBBUk0KCkZyaSBEZWMgMjQgMTg6MDU6MDAgRVNUIDE5OTkKCjE5OTktMTItMjMgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKICogZmlsZS5jOiBVc2UgdWdseSBsaWJjX3N0YXQgdHJpY2sgYWxzbyBmb3Igc3RhdDY0LgogICBJbXBsZW1lbnQgc3lzX3N0YXQ2NCwgc3lzX2ZzdGF0NjQsIHN5c19sc3RhdDY0LCBhbmQgcHJpbnRzdGF0NjQuCiAqIHByb2Nlc3MuYyAoaW50ZXJuYWxfY2xvbmUpOiBGaXggYSBmZXcgdHlwb3MgYW5kIGFkZCBkZWZpbml0aW9ucyB0byBtYWtlCiAgIGl0IGF0IGxlYXN0IGNvbXBpbGUuCiAqIGxpbnV4L3N5c2NhbGwuaDogRGVjbGFyZSBzeXNfc3RhdDY0LCBzeXNfbHN0YXQ2NCwgYW5kIHN5c19mc3RhdDY0LgogKiBsaW51eC9zeXNjYWxsZW50Lmg6IERlZmluZSB0YWJsZSBlbnRyaWVzIGZvciBzeXNfc3RhdDY0LCBzeXNfbHN0YXQ2NCwKICAgYW5kIHN5c19mc3RhdDY0LgogKiBhY2xvY2FsLm00OiBEZWZpbmUgQUNfU1RBVDY0LgogKiBhY2NvbmZpZy5oOiBEZWZpbmUgSEFWRV9TVEFUNjQuCiAqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX1NUQVQ2NC4KClRodSBEZWMgMjMgMTU6MDE6MzcgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIGZ0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2xpbnV4MzkwLyB0byBhZGQKICAgIHN1cHBvcnQgZm9yIExpbnV4IG9uIHRoZSBJQk0gUy8zOTAgYXJjaGl0ZWN0dXJlCiAgKiBwcm9jZXNzLmM6IGFkZCBpbnRlcm5hbF9jbG9uZSgpLCBjdXJyZW50bHkgb25seSBzaG93cyB0aGUgb3B0aW9ucwogICogc3lzY2FsbC5jOiB1c2UgaW50ZXJuYWxfY2xvbmUgdG8gaGFuZGxlIFNZU19jbG9uZQoKTW9uIERlYyAyMCAwMDoyNzo1MCBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJld3JpdGUgbW1hcC1oYW5kbGluZyB0byBzdXBwb3J0IG1tYXAyIG9uIExpbnV4CgpUdWUgRGVjIDE0IDExOjM1OjE2IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTm90ZSB0aGF0IExpbnV4IGNhbiBoYW5kbGUgc3lzX3NlbW9wKCkgYXMgd2VsbAoKVHVlIE5vdiAzMCAxMTowNToyNiBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEluY2x1ZGUgbGludXgvaW42LmggZm9yIGdsaWJjMi4wIGFuZCBvbGRlcgoKTW9uIE5vdiAyOSAxNjozMzowNCBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoZXMgZnJvbSBKb2huIEh1Z2hlcyB0byBtYWtlIGNvbmZpZ3VyZSBzdXBwb3J0IFVuaXhXYXJlCgpTYXQgTm92IDI3IDIxOjM4OjE3IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogRW5oYW5jZSBzeXNfcXVlcnlfbW9kdWxlCgpGcmkgTm92IDI2IDEwOjUxOjU1IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUGF0Y2hlcyBmcm9tIEpvaG4gSHVnaGVzOgogICAgKyBjb3NtZWN0aWMgZml4IGluIHN5c19nZXRwbXNnCiAgICArIGFsbG93IG5ldC5jIHRvIGNvbXBpbGUgb24gc3lzdGVtcyB3aXRob3V0IEFGX0lORVQ2CiAgICArIE9ubHkgdXNlIGxvbmdfdG9fc2lnc2V0IG9uIExpbnV4IHN5c3RlbXMKICAgICsgVW5peFdhcmUgdHJlYXRzIHNpZ21hc2tfdCBhbmQgc2lnbWFza190KiBhcyB0aGUgc2FtZSB0aGluZwogICAgKyBBZGQgcG9sbGhhY2sKICAgICsgUGFyc2UgbW91bnQgYXJndW1lbnRzIGZvciBVbml4V2FyZQogICAgKyBBQ0wgZml4ZXMgZm9yIFVuaXhXYXJlCgpGcmkgTm92IDI2IDAxOjI4OjA5IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUmVsZWFzZSA0LjEgdG8gZ2V0IGFsbCB0aGUgY2hhbmdlcyBtYWRlIG91dCB0aGVyZQoKVGh1IE5vdiAxOCAxODowNDowNCBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHN0cmFjZWZvcmsgZnJvbSBBbGV4ZXkgS3V6bmV0c292IDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAgICsgU29ja2V0IGNhbGxzIHBhcnNlZCBiZXR0ZXIKCSsgYnVuY2ggb2YgYWxwaGEgT1NGIHN5c2NhbGxzIGFkZGVkCgkrIEZpeCBhbHBoYSAzMi82NCBiaXQgaXNzdWVzCgpNb24gTm92ICAxIDIwOjUyOjA4IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTW92ZSBMaW51eCBrZXJuZWxtb2R1bGUtZnVuY3Rpb25zIGZyb20gc3lzdGVtLmMgdG8gYmptLmMgYW5kCiAgICByZW1vdmUgZHVwbGljYXRlIGZvciBzeXNfY3JlYXRlX21vZHVsZQogICogTGludXggTUlQUyB1cGRhdGVzOgogICAgKyBQbGF5IHdpdGggI2lmZGVmJ3MgaW4gbmV0LmMgdG8gZ2V0IElQdjYgcmlnaHQKICAgICsgVXNlIHByaW50YXJncyBmb3Igdm04Ni1zeXNjYWxsCgpTdW4gT2N0IDMxIDIyOjAzOjAwIENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgTGludXggbWlwcyBwYXRjaCBmcm9tIEZsb3JpYW4gTG9ob2ZmIDxmbG9AcmZjODIyLm9yZz4KCk1vbiBPY3QgMTEgMDA6MzY6MjUgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2ggZnJvbSBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiB0byBzeXNfcXVlcnlfbW9kdWxlCiAgICBhbmQgc3lzX2RlbGV0ZV9tb2R1bGUgY29ycmVjdGx5CgpXZWQgT2N0ICA2IDAyOjAwOjMzIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFVwZGF0ZSBjdnNidWlsZCB0byBnaXZlIGEgYmV0dGVyIGVycm9yIGlmIGF1dG9jb25mIGlzbid0IGluc3RhbGxlZAogICogQWRkIHRlc3QgZm9yIGxpbnV4L3B0cmFjZS5oIHRvIGNvbmZpZ3VyZQogICogU2luY2Ugd2UgZGVmaW5lIEdOVV9TT1VSQ0UgaW4gdGhlIE1ha2VmaWxlIHdlIGRvbid0IG5lZWQgdG8gZGVmaW5lCiAgICBVU0VfR05VIGluIGZpbGUuYyBhbnltb3JlCgpGcmkgU2VwIDEwIDA0OjM1OjE2IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqICNkZWZpbmUgVVNFX0dOVSBiZWZvcmUgaW5jbHVkaW5nIGZpbGUuYyBzbyB3ZSBnZXQgc29tZSBleHRyYSBPXyogZmxhZ3MKClR1ZSBBdWcgMzEgMTY6Mjc6MjEgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIG1pc3NpbmcgfSBpbiBJUHY2IG91dHB1dAoKVHVlIEF1ZyAzMSAwMToyMzowOCBDRVNUIDE5OTkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogVXBkYXRlIGNvcHlyaWdodCBmb3Igc3RyYWNlLWdyYXBoIHRvIEJTRCB0byBiZSBjb25zaXN0ZW50IHdpdGgKICAgIHRoZSByZXN0IG9mIHN0cmFjZQoKTW9uIEF1ZyAzMCAwMDo1Mzo1NyBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIERhbmllbCBKYWNvYm93aXR6OiBLRVJOX0pBVkFfKiBhbmQgS0VSTl9TRUNVUkVMVkwgYXJlbid0CiAgICBkZWZpbmVkIGZvciBhbGwga2VybmVsdmVyc2lvbnMKICAqIEFkZCBzdHJhY2UtZ3JhcGgsIHdyaXR0ZW4gYnkgUmljaGFyZCBCcmFha21hbiA8ZGFya0B4czRhbGwubmw+CgpUaHUgQXVnIDE5IDEzOjEwOjE1IENFU1QgMTk5OSBKYWt1YiBKZWxpbmVrIDxqakB1bHRyYS5saW51eC5jej4KCiAgKiBsaW51eC9zcGFyYy9zeXNjYWxsLmg6IERlY2xhcmUgY3JlYXRlX21vZHVsZS9pbml0X21vZHVsZS4KICAqIGNvbmZpZ3VyZS5pbjogQWxsb3cgY29tcGlsYXRpb24gaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5CiAgICB0aGFuIHRoZSBzb3VyY2Ugb25lLgogICogc2lnbmFsLmM6IFVzZSBhc20vcmVnLmggYW5kIHN0cnVjdCByZWdzIGluc3RlYWQgb2YgcHRfcmVncwogICAgc28gdGhhdCB3ZSBkb24ndCBkZXBlbmQgb24gYXNtL3B0cmFjZS5oIHdoaWNoIGNsYXNoZXMgd2l0aAogICAgZ2xpYmMgc3lzL3B0cmFjZS5oLgogICogdXRpbC5jOiBMaWtld2lzZS4KICAqIHN5c2NhbGwuYzogTGlrZXdpc2UuCgpXZWQgQXVnICA0IDE4OjAxOjUwIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFN5c2NhbGwgOTQgb24gTGludXggYWxwaGEgaXMgc3lzX3BvbGwKClN1biBKdWwgMjUgMTQ6Mzg6MzMgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgaW4gVW5peFdhcmUgcGF0Y2hlcyBmcm9tIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KClRodSBKdWwgMTUgMjM6MDA6MzIgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2ggZnJvbSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AZHMyLnBnLmdkYS5wbD46CiAgICArIENvcnJlY3RseSBpbXBsZW1lbnQgZml4IHN5c19jcmVhdGVtb2R1bGUgKExpbnV4KQogICAgKyBBZGQgbGltaXRlZCBoYW5kbGlnIG9mIHN5c19pbml0bW9kdWxlIChMaW51eCkKClR1ZSBKdWwgMTMgMTc6MDc6NTAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIGNvbmZpZ3VyZS10ZXN0IGZvciBzeXMvcmVnLmggYW5kIHVzZSB0aGF0CiAgKiBVc2Ugc3lzL3JlZy5oIGluc3RlYWQgb2YgYXNtL3B0cmFjZS5oCgpTYXQgSnVsIDEwIDAxOjQ2OjEwIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJlbW92ZSBoYWNrIGluIHNpZ25hbC5jIGZvciBhcm0gYXJjaGl0ZWN0dXJlCiAgKiBBZGQgaGFjayBzbyB3ZSBjb21waWxlIGNvcnJlY3RseSBvbiBwb3dlcnBjCgpGcmkgSnVsICA5IDAyOjI4OjE2IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCBhIGNvcnJlY3RlZCBwYXRjaCBmcm9tIERhbmllbCBKYWNvYm93aXR6CgpUaHUgSnVsICA4IDE2OjAwOjA0IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gRGFuaWVsIEphY29ib3dpdHogdG8gYWxsb3cgdXMgdG8gdXNlIHRoZSBrZXJuZWwgdHlwZXMKICAgIGZvciB0aGUgc3RhdCBzdHJ1Y3R1cmUKClRodSBKdW4gMjQgMTU6NTQ6MTggQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogRml4IHRlc3QgZm9yIHN5cy9yZWcgaW5jbHVkZQoKVHVlIEp1biAyMiAxNzoyNjozMyBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBGaXhlZCBzb21lIExpbnV4L3Bvd2VycGMgc2lsbHluZXNzLCB0aGFua3MgdG8gRGFuaWVsIEphY29ib3dpdHoKICAqIEZpeGVkIHNvbWUgU3VuT1MgY29tcGlsZSBwcm9ibGVtcyBlYXJsaWVyIHRoYXQgSSBmb3Jnb3QgdG8gaW5jbHVkZQogICAgaGVyZQoKTW9uIEp1biAxNCAxMjo0NDoyNSBDRVNUIDE5OTkKCiAgKiBBdm9pZCBsZWFraW50IGZkIGludG8gY2hpbGQgd2hlbiBmb3JraW5nLCBwYXRjaCBmcm9tCiAgICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgpGcmkgSnVuIDExIDE0OjU0OjQ3IENFU1QgMTk5OQoKICAqIEFwcGxpZWQgSVJJWDY0IHBhdGNoIGZyb20gVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4KICAqIEFwcGxpZWQgU29sYXJpcyBhbmQgbWFucGFnZSB1cGRhdGVzIGZyb20gR3V5IEhhcnJpcyA8Z3V5QG5ldGFwcC5jb20+CgpXZWQgSnVuICA5IDE0OjQ4OjQ5IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEJyb3VnaHQgc3lzY2FsbCBsaXN0IGZvciBhbHBoYSB1cCB0byBkYXRlCgpXZWQgSnVuICAyIDE4OjMwOjEyIENFU1QgMTk5OSBKYWt1YiBKZWxpbmVrIDxqakB1bHRyYS5saW51eC5jej4KCiAgKiBzeXN0ZW0uYzogc3lzX3Vtb3VudDIgc3lzY2FsbCBzdXBwb3J0LgogICogbGludXgvc3BhcmMvZXJybm9lbnQuaDogVXBkYXRlIHNwYXJjLWxpbnV4IGVycm5vcy4KICAqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaDogVXBkYXRlIHVzZWQgc3BhcmMtbGludXggc3lzY2FsbHMuCiAgKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IE1hdGNoIDIuMi45IHN5c3RlbSBjYWxscy4KICAqIGZpbGUuYzogc3BhcmMtbGludXggYXNtL3N0YXQuaCB1c2VzIGRldl90IGV0Yy4gdHlwZXMsCiAgICBzbyBpdCBuZWVkcyBzdHJhY2UncyBvd24gY29weSBvZiB0aGUgc3RhdCBzdHJ1Y3R1cmUuCiAgKiB1dGlsLmM6IE1ha2UgaXQgY29tcGlsZSBvbiBzcGFyYy1saW51eC4KICAqIHN0cmFjZS5jOiBGaXggc3RyYWNlIC1mIGFuZCAtZmYgb3BlcmF0aW9uIG9uIHNwYXJjLWxpbnV4LgogICogc2lnbmFsLmM6IHJ0X3NpZ2FjdGlvbiBoYXMgZGlmZmVyZW50IGFyZ3VtZW50cyBvbiBzcGFyYyotbGludXgKICAgIGFuZCBhbHBoYS1saW51eC4KICAqIHN5c2NhbGwuYzogUmVjb2duaXplIHNwYXJjNjQtbGludXggYmluYXJpZXMuCgpGcmkgTWF5IDI4IDIxOjA5OjAwIFBTVCBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPgoKICAqIGNvbmZpZ3VyZS5pbjogRml4IHR5cG8gKENGTEFHIC0+IENGTEFHUykuCgogICogc3lzY2FsbC5jOiBEb24ndCBpbmNsdWRlIGxpbnV4L3B0cmFjZS5oIGV4cGxpY2l0bHkgZm9yIGdsaWJjLgoKVGh1IE1heSAyNyAxMzo1OToyNyBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgc29tZSBzeXNjdGwgc3VwcG9ydCwgcGF0Y2ggZnJvbSBVbHJpY2ggRHJlcHBlcgoKV2VkIE1heSAyNiAwMTowNDozNCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBVc2Uga2VybmVsIGRpcmVudCBzdHJ1Y3R1cmUgZm9yIExpbnV4CgpTdW4gTWF5ICA5IDAyOjE4OjMwIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIGluIHBhdGNoZXMgZnJvbSBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KICAgICsgc29tZSBsYXlvdXQgYW5kIG90aGVyIG1pbm9yIGZpeGVzCiAgICArIGFkZCBzb21lIG02OGstc3BlY2lmaWMgdGhpbmdzIHRvIGxpbnV4L3N5c2NhbGxlbnQuaC4gTm90ZSB0aGF0IG02OGsKICAgICAgaXMgc2ltaWxhciBlbm91Z2ggdG8gaTM4NiB0byBub3QgbmVlZCBpdCdzIG93biBzdWJkaXJlY3RvcnkKICAgICsgYWRkIHN1cHBvcnQgZm9yIHNlbmRmaWxlIGFuZCBtcmVtYXAgc3lzY2FsbHMgZm9yIExpbnV4CiAgKiBNZXJnZSBpbiBwYXRjaGVzIGZyb20gU2FzY2hhIFNjaHVtYW5uIDxzYXNjaGFAc2NodW1hbm4uMm5zLmRlPgogICAgKyBpb2N0bHMuaCB2cyBzeXMvaW9jdGwuaCBvbiBBbHBoYSBwbGF0Zm9ybQogICAgKyBwb2ludGVyIHdhcyBjYXN0ZWQgdG8gYW4gaW50IGluIHN0cmVhbS5jCiAgICArIHN0cnNpZ25hbCgpIG5lZWRzIC1EX0dOVV9TT1VSQ0UgaW4gQ0ZMQUdTCiAgICArIHNldmVyYWwgb3RoZXIgY2FzdHMgY2hhbmdlZAogICAgKyBjb3JyZWN0IEFSTS9QT1dFUlBDIGFyY2hpdGVjdHVyZSBkZWZpbmVzIGluIGFjY29uZmlnLmgKICAqIE1lcmdlIGluIHBhdGNoZXMgZnJvbSBNb3J0ZW4gV2VsaW5kZXIgPHRlcnJhQGRpa3UuZGs+CiAgICArIGFkZCBzb21lIGF1dG9jb25mLXRlc3RzIGZvciBpbmNsdWRlZmlsZXMKICAgICsgaGFuZGxlIHNvbGFyaXMgdmVyc2lvbiBvZiBzaWdjb250ZXh0IHN0cnVjdCAoYWN0dWFsbHkgSSBoYWNrZWQgdGhpcwogICAgICB1cCBhZ2FpbiwgYnV0IHRoZSBpZGVhIGlzIGhpcyA6KQoKU3VuIEFwciAxOCAyMjozMjo0MiBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBVcGRhdGUgc3lzY2FsbHMgZm9yIGxpbnV4IGFscGhhLCBwYXRjaCBmcm9tIEJhcnQgV2FybWVyZGFtCiAgICA8YmFydHdAZGViaWFuLm9yZz4KICAqIFVwZGF0ZSBzcGFyYyBjb2RlIHNvIGl0IGFjdHVhbGx5IGNvbXBpbGVzCgpGcmkgQXByIDE2IDAyOjE4OjA1IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCBzdXBwb3J0IGZvciBvbGRfKnN0YXQgZnVuY3Rpb25zIGZvciBMaW51eC4gUGxlYXNlIG5vdGUgeW91IG5lZWQKICAgIHRvIHVzZSByZWFzb25hYmx5IHJlY2VudCBrZXJuZWwgaGVhZGVycyB0byBjb21waWxlIHN0cmFjZSBub3cuCiAgKiBDaGFuZ2UgcmVmZXJlbmNlcyB0byBMSU5VWCBpbnRvIGxpbnV4IGluIGZpbGUuYwogICogRml4IGluY2x1ZGUgZm9yIExEVCBpbiBtZW0uYwoKVGh1IEFwciAxNSAyMjoyODoxNSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBDaGFuZ2UgaW4gc3RyYWNlIG1haW50YWluZXJzaGlwLCBqcnMgcGFzc2VkIHRoZSB0b3JjaCB0byBtZS4KICAqIFVzZSBhdXRvY29uZiAyLjEzCiAgKiBJbmNvcnBvcmF0ZSBhbGwgY2hhbmdlcyBhbHJlYWR5IG1hZGUgaW4gdGhlIERlYmlhbiBzdHJhY2UgcGFja2FnZToKICAgICsgY29tcGlsZXMgd2l0aCBtb3JlIExpbnV4IGtlcm5lbHMKICAgICsgYWRkZWQgc3VwcG9ydCBmb3IgbW9yZSBMaW51eCBhcmNoaXRlY3R1cmVzCiAgICArIGFkZCBzdXBwb3J0IGZvciBhIGxvdCBvZiBleHRyYSBzeXNjYWxscwogICAgKyBmaXggc29tZSBwcm9ibGVtcyB3aXRoIGhhbmdpbmcgY2hpbGRyZW4KICAgICsgY2hlY2sgc3RyYXkgc3lzY2FsbCBhZnRlciBleGVjdgogICAgKyBkZWNvZGUgY2FwZ2V0IGFuZCBjYXBzZXQgYXJndW1lbnRzCiAgICArIGFkZCBtb3JlIGNvbnN0YW50cyB0byBuZXQuYwogICAgKyBkZXRlY3QgUk9TRSBuZXR3b3JraW5nCiAgICArIGFkZCBtb3JlIHByb3RvY29sIGZhbWlsaWVzIHRvIGRvbWFpbnMKICAgICsgYWRkIElQSVAgcHJvdG9jb2wKICAgICsgYWRkZWQgTVNHX1BST1hZIGFuZCBNU0dfQ1RSVU5DIHRvIG1zZ19mbGFncwogICAgKyBhZGRlZCBTT19CU0RDT01QQVQgYW5kIFNPX1JFVVNFUE9SVCB0byBzb2Nrb3B0aW9ucwogICAgKyBhZGRlZCBJUCwgSVBYIGFuZCBUQ1Atb3B0aW9ucwogICAgKyBhZGRlZCBJUCwgSVBYIGFuZCBUQ1Agc3VwcG9ydCB0byBnZXQtL3NldHNvY2tvcHQoKQogICAgKyBhZGRlZCBJUFggc3VwcG9ydAogICAgKyB1cGRhdGVkIGhhbmRsaW5nIG9mIHNpZ25hbHMKClN1biBPY3QgMjcgMjI6Mjg6MDAgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB1dGlsLmMgKHVtb3Zlc3RyKSBbTElOVVhdOiBIYW5kbGUgTGludXggbGlrZSBTdW5PUzQKCWluc3RlYWQgb2YgU1ZSNC4gIFRoYXQgaXMsIHJlYWQgYSBmZXcgYnl0ZXMgYXQgYSB0aW1lCgl0byBhdm9pZCBvdmVycnVubmluZyB0aGUgZW5kIG9mIHRoZSBzdGFjay4KCkZyaSBNYXkgMzEgMDE6NDg6NDkgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4xIGlzIHJlbGVhc2VkLgoKVGh1IE1heSAyMyAwMTowNDo0MyAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGFjbG9jYWwubTQgKEFDX0RFQ0xfU1lTX0VSUkxJU1QpOiBUcnkgbG9va2luZyBpbiBzdGRpby5oCglhcyB3ZWxsIHNpbmNlIHRoYXQncyB3aGVyZSBnbGliYyBkZWNsYXJlcyBpdC4gIEdvIGZpZ3VyZS4KCSogc2lnbmFsLmMgKHN5c19zaWdyZXR1cm4pIFtBTFBIQV06IFVzZSBzaWdjb250ZXh0CglpbnN0ZWFkIG9mIHNpZ2NvbnRleHRfc3RydWN0IHNpbmNlIGdsaWJjIHY1KyBhcHBhcmVudGx5CglwbGF5cyBnYW1lcyB3aXRoIHRoZSBuYXRpdmUgT1MgbmFtZXNwYWNlLgoJRnJvbSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQEFaU3Rhck5ldC5jb20+LgoKTW9uIE1heSAyMCAyMzoxNzoxNCAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTQgaXMgcmVsZWFzZWQuCgoJKiBhY2xvY2FsLm00IChBQ19TVFJVQ1RfTVNHX0NPTlRST0wpOiBOZXcgbWFjcm8uCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGNhbGwgdG8gQUNfU1RSVUNUX01TR19DT05UUk9MLgoJKiBuZXQuYyAocHJpbnRtc2doZHIpOiBIYW5kbGUgQlNEIDQuMyBhbmQgNC40IG1zZ2hkciBtZW1iZXJzCiAJZGlmZmVyZW50bHkuCglSZXBvcnRlZCBieSBIZW5yaWsgU3Rvcm5lciA8c3Rvcm5lckBvc2lyaXMucGluZy5kaz4uCgoJKiBjb25maWd1cmUuaW46IChBQ19DSEVDS197SEVBREVSUyxGVU5DU30pOiBBZGQgY2hlY2tzIGZvcgogCXN5cy9maWxpby5oIGFuZCBzeXMvc3RyZWFtLmggYW5kIHJlbW92ZSBjaGVjayBmb3IgcG9sbC4KCSogZGVzYy5jIChkZWNvZGVfc2VsZWN0LCBzeXNfc2VsZWN0LCBzeXNfb2xkc2VsZWN0KSBbTElOVVhdOgogCUhhbmRsZSBvbGQgYW5kIG5ldyBzdHlsZXMgb2YgYXJndW1lbnQgcGFzc2luZyBmb3Igc2VsZWN0IG9uIExpbnV4LgoJKiBpb2N0bC5jLCBzdHJlYW0uYzogQ29uZGl0aW9uYWxpemUgc3RyZWFtIGNvZGUgb24gcHJlc2VuY2Ugb2YKCXN5cy9zdHJlYW0uaCBpbnN0ZWFkIG9mIHBvbGwgYmVjYXVzZSBnbGliYyBpbXBsZW1lbnRzIHBvbGwgYnV0Cglub3QgdGhlIHJlc3Qgb2YgdGhlIHN0cmVhbSBpbnRlcmZhY2UuCgkqIHNpZ25hbC5jIFtMSU5VWF06IFN0YW5kYXJkaXplIG9uIHRoZSBuYW1lIHNpZ2NvbnRleHRfc3RydWN0LgoJKHN5c19zaWdwcm9jbWFzaykgW0FMUEhBXTogSGFuZGxlIE9TRiBmbGF2b3Igd2hpY2ggaXMgbW9yZSBsaWtlCglzaWdzZXRtYXNrLgoJKiB0ZXJtLmMgKHRlcm1faW9jdGwpOiBVc2UgX1ZNSU4sIGlmIHByZXNlbnQsIGZvciBUQ3tHLFN9RVRBKi4KCSogdXRpbC5jICh1bW92ZW4sIHVtb3Zlc3RyKTogTW92ZSBkYXRhIGluIGxvbmctc2l6ZWQgY2h1bmtzCglhdCBhIHRpbWUsIGluc3RlYWQgb2YgaGFyZCBjb2RpbmcgaXQgdG8gYmUgNC4KCUZyb20gRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBBWlN0YXJOZXQuY29tPi4KCk1vbiBNYXkgMjAgMDE6MTk6MzYgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjEzIGlzIHJlbGVhc2VkLgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19IRUFERVJTKTogQWRkIGNoZWNrIGZvciBhc20vc2lnY29udGV4dC5oLgoJKiBzaWduYWwuYyBbSEFWRV9BU01fU0lHQ09OVEVYVF9IXTogQ29uZGl0aW9uYWxseSBpbmNsdWRlCglhc20vc2lnY29udGV4dC5oIHRvIGRlZmluZSBzaWdjb250ZXh0X3N0cnVjdCBhbmQgZG9uJ3QgZGVmaW5lIGl0Cglsb2NhbGx5IGlmIHRoZSBoZWFkZXIgaXMgcHJlc2VudC4KCgkqIHN5c2NhbGwuYyAobmVycm5vc3swLDJ9KTogQ29ycmVjdCBzaXplIGNvbXB1dGF0aW9uLgoKCSogTWFrZWZpbGUuaW46IFJlbW92ZSBkZXBlbmRlbmNpZXMgYW5kIHJ1bGVzIHJlbGF0aW5nIHRvIGZpbGVzCiAJbm9ybWFsbHkgZm91bmQgaW4gdGhlIG9zIGRpcmVjdG9yeS4gIEJlY2F1c2Ugb2YgdGhlIG5ldyBzY2hlbWUgd2UKIAlkb24ndCBrbm93IHByZWNpc2VseSB3aGVyZSB0aGV5IGNvbWUgZnJvbS4gIFNpZ2guCgkqIHNpZ25hbGVudC5zaDogTWFrZSBpdCB3b3JrIGZvciBzdW5vczQsIGxpbnV4LCBhbmQgc3ZyNC4KCSoge3N1bm9zNCxsaW51eHssL2FscGhhfSxzdnI0fS9NYWtlZmlsZS5pbjogTWFrZSBydWxlcyBjb3JyZXNwb25kCiAJdG8gdHJhZGl0aW9uYWwgbWFrZSBzeW50YXguICBBZGQgc2lnbmFsZW50LmggdG8gZmlsZXMgd2hpY2ggY2FuCiAJdW5jb25kaXRpb25hbGx5IGJlIHJlYnVpbHQuICBQcmV2ZW50IHNpZ25hbGVudC5oIGZyb20gYmVpbmcKIAl1bmNvbmRpdGlvbmFsbHkgYmVpbmcgcmVidWlsdCBzaW5jZSBpdCdzIGN1c3RvbWl6ZWQuCgkqIHtzdW5vczQsbGludXh7LC9hbHBoYX0sc3ZyNH0ve2lvY3RsZW50LGVycm5vZW50LHNpZ25hbGVudH0uaDoKIAlVc2UgdmVyc2lvbnMgYnVpbHQgYnkge2lvY3RsZW50LGVycm5vZW50LHNpZ25hbHRlbnR9LnNoLgogIAkqIHN1bm9zNC9pb2N0bGVudC5zaDogV29yayBhcm91bmQgc3ByaW50ZiB0cm91YmxlcyB3aXRoIFN1bk9TCiAJNC4xLjQgYW5kIGdjYyAyLjcuMi4KClN1biBNYXkgMTkgMTc6MTQ6MDkgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmluOiBBZGQgT1NBUkNIIGNvbmNlcHQgdG8gZmluaXNoCglidWlsZCBzdXBwb3J0IGZvciB0aGUgYWxwaGEuCgkqIE1ha2VmaWxlLmluLCBsaW51eC9NYWtlZmlsZS5pbjogUmV3cml0ZSBjbGVhbiwgZGlzdGNsZWFuLAoJYW5kIG1haW50YWluZXItY2xlYW4gcnVsZXMuCgkqIGRlZnMuaCwgaW9jdGxzb3J0LmM6IE1ha2UgaW9jdGwgY29kZSBtZW1iZXIgdW5zaWduZWQuCgkqIGlvY3RsLmMsIGlvY3Rsc29ydC5jIChjb21wYXJlKTogUGVyZm9ybSBleHBsaWNpdCBjaGVja2luZwoJZm9yIGxlc3MsIGdyZWF0ZXIsIGFuZCBlcXVhbCBzaW5jZSBzdWJ0cmFjdGlvbiBvbiB0d28ncwoJY29tcGxlbWVudCBudW1iZXJzIGlzbid0IGFuIG9yZGVyIHJlbGF0aW9uIChpdCBpc24ndCB0cmFuc2l0aXZlKSEKCSogbGludXgvTWFrZWZpbGUuaW46IEFkZCBydWxlcyBmb3IgdGhlIHNpZ25hbGVudC5oIGZpbGUuCgkqIGxpbnV4L2FscGhhL01ha2VmaWxlLmluOiBOZXcgZmlsZS4KClN1biBNYXkgMTkgMDE6MTI6MjggMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjEyIGlzIHJlbGVhc2VkLgoKCSogbGludXh7LGFscGhhfS9pb2N0bGVudC5zaDogVHdlYWsgZm9yIHJlY2VudCBrZXJuZWxzLgoJRnJvbSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgoJKiBkZWZzLmggKFNVUFBPUlRFRF9QRVJTT05BTElURVMsIERFRkFVTFRfUEVSU09OQUxJVFkpOiBOZXcuCgkqIHN5c2NhbGwuYyAoc2V0X3BlcnNvbmFsaXR5KTogTmV3LgoJKiBzdHJhY2UuYyAobWFpbik6IENhbGwgc2V0X3BlcnNvbmFsaXR5LgogCSogZGVmcy5oLCBzeXNjYWxsLmMsIGlvY3RsLmMsIHNpZ25hbC5jOiBNYWtlIHN5c2VudCwgZXJybm9lbnQsCiAJaW9jdGxlbnQsIGFuZCBzaWduYWxlbnQgaW5kaXJlY3QgcG9pbnRlcnMgYW5kIHJlZGlyZWN0IHRoZW0KCWJhc2VkIG9uIHBlcnNvbmFsaXR5LgoJKiB7c3Vub3M0LHN2cjQsbGludXh7LC9hbHBoYX19L3NpZ25hbGVudC5oOiBOZXcgZmlsZXMuCglTdWdnZXN0ZWQgYnkgVG9tIER5YXMgPHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHU+LgoKCSogdXRpbC5jICh1cGVlayk6IEhhbmRsZSBjYXNlIHdoZXJlIHB0cmFjZSByZXR1cm5zIGEgbG9uZwoJYW5kIHNpemVvZihsb25nKSAhPSBzaXplb2YoaW50KS4KCUZyb20gUmljaGFyZCBIZW5kZXJzb24gPHJpY2hhcmRAdHdpZGRsZS50YW11LmVkdT4KCkZyaSBNYXkgMTcgMjE6MDM6MzYgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjExIGlzIHJlbGVhc2VkLgoKCSogbWFueSBmaWxlczogRml4IG1vcmUgcHJpbnRmIHdhcm5pbmdzIGZvciBvdGhlciBwbGF0Zm9ybXMuCgoJKiBpcGMuYyAoc3lzX21zZ3JjdikgW0xJTlVYXTogQ29uZGl0aW9uYWxpemUgZGVmaW5pdGlvbiBvZiBpcGNfd3JhcHBlci4KCgkqIGxpbnV4L2R1bW15Lmg6IEhhbmRsZSBtaXNzaW5nIGxpYnJhcnkgc3VwcG9ydCBmb3Ige3NlbmQscmVjdn1tc2cuCglSZXBvcnRlZCBieSBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBiaWdidWcuZnJhbmtlbi5kZT4uCgoJKiBsaW51eC9zeXNjYWxsLmggKHN5c191dGltZXMpOiBGaXggYSB0eXBvIGluIHRoZSBkZWNsYXJhdGlvbi4KCUZyb20gVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGU+LgoKRnJpIE1heSAxNyAwMDo1MDowNiAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTAgaXMgcmVsZWFzZWQuCgoJKiBNYWtmaWxlLmluOiBBZGQgb3MvYXJjaCB0byBpbmNsdWRlcyBzbyB0aGF0IGEgZ2l2ZW4gYXJjaAoJKGxpa2UgYWxwaGEpIGNhbiBvdmVycmlkZSB0aGUgbmF0aXZlIGFyY2ggKGxpa2UgaTM4NikuCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHNlbmRtc2cuCgoJKiBuZXQuYzogTWFrZSBzZW5kbXNnIGFuZCByZWN2bXNnIGRlcGVuZGVudCBvbiBhbiBhdXRvY29uZgoJdGVzdC4gIFJlcG9ydGVkIGJ5IE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCgkqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbjogRGV0ZWN0IHRoZSBhbHBoYS4KCSogaW9jdGwuYzogSGFuZGxlIHRoZSBhbHBoYS4KCSogZGVmcy5oOiBNYWtlIHNvbWUgbWVtYmVycyBsb25nIGZvciB0aGUgYWxwaGEuICBEZWZpbmUKCXNvbWUgcmVnaXN0ZXIgbmlja25hbWVzLiAgQWRkIHN1cHBvcnQgZm9yIFdBSVRFWEVDVkUuCgkqIGZpbGUuYyBbQUxQSEFdOiBTdXBwb3J0IHRoZSBhbHBoYSBmb3Igc3RhdGZzLiAgQWRkCglvc2Zfc3RhdGZzIGFuZCBvc2ZfZnN0YXRmcyBmb3IgdGhlIGFscGhhLiAgTWFrZSBkYW1uIHN1cmUKCW1ham9yIGFuZCBtaW5vciByZXN1bHRzIGFyZSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBwcmludGYuCgkqIHNpZ25hbC5jLCBzeXNjYWxsLmM6IFN1cHBvcnQgdGhlIGFscGhhLgoJKiBwcm9jZXNzLmM6IEFkZCBhbHBoYSB1c2VyIG9mZnNldHMuCgkqIG1vc3QgZmlsZXM6IFVzZSAlbD8gZm9yIHByaW50ZiBhcmd1bWVudHMgc2luY2UKCW1vc3QgYXJlIG5vdyBsb25ncyBmb3IgdGhlIGFscGhhLgoJKiBsaW51eC9hbHBoYS97ZXJybm9lbnQuaCxpb2N0bGVudC57aCxzaH0sc3lzY2FsbGVudC5ofToKCU5ldyBmb3IgdGhlIGFscGhhLgoJRnJvbSBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBiaWdidWcuZnJhbmtlbi5kZT4uCgpXZWQgTWF5IDE1IDAwOjI5OjM3IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC45IGlzIHJlbGVhc2VkLgoKCSogY29uZmlnLmluLCBjb25maWcuc3ViLCBpbnN0YWxsLXNoOiBVcGdyYWRlIHRvIGF1dG9jb25mIDIuMTAuCgoJKiBsaW51eC9kdW1teS5oLCBsaW51eC9zeXNjYWxsZW50LmgsIGxpbnV4L3N5c2NhbGwuaDogQWRkIHJlY2VudAoJTGludXgga2VybmVsIHZlcnNpb24gc3lzdGVtIGNhbGxzLgoKV2VkIE1hciAxMyAwMTowMzozOCAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGlwYy5jIFtTVU5PUzRdOiBBZGQgU3VuT1Mgc3VwcG9ydCBmb3IgZGVjb2RpbmcgSVBDIGNhbGxzLgoJKiBzeXNjYWxsLmMgW1NVTk9TNF06IENvbXBpbGUgZGVjb2RlX3N1YmNhbGwgb24gU3VuT1MgYW5kCglkZWNvZGUgSVBDIGNhbGxzIHVzaW5nIGl0LgoJKiBzdW5vczQvZHVtbXkuaDogQWxpYXMgc3lzX3NlbW9wIHRvIHByaW50YXJncy4KCSogc3Vub3M0L3N5c2NhbGwuaDogQWRkIG5ldyBwc2V1ZG8gc3lzY2FsbHMgZm9yIElQQy4KCSogc3Vub3M0L3N5c2NhbGxlbnQuaDogSW5jbHVkZSBuZXcgc3ViY2FsbHMgZm9yIElQQy4KCUZyb20gTWF0dGhpYXMgUGZhbGxlciA8bGVvQGRhY2hhdS5tYXJjby5kZT4uCgpUdWUgRmViIDEzIDIyOjA4OjI1IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC44IGlzIHJlbGVhc2VkLgoKCSogdGltZS5jIFtMSU5VWF06IEV4cGxpY2l0bHkgaW5jbHVkZSBsaW51eC92ZXJzaW9uLmguCgoJKiBzdHJhY2UuYyAobWFpbik6IERvbid0IGxldCB0aGVtIGV2ZW4gKnRyeSogdG8KCWdldCBzdHJhY2UgdG8gYXR0YWNoIHRvIGl0c2VsZiBzaW5jZSBzb21lIHN5c3RlbXMKCWRvbid0IGhhbmRsZSB0aGlzIGNhc2UgdmVyeSBncmFjZWZ1bGx5LgoJUmVwb3J0ZWQgYnkgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1Pi4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBGaXggaXQgZm9yIHN1YmRpcmVjdG9yaWVzLgoKCSogc3Vub3M0L3N5c2NhbGxlbnQuaCwgc3ZyNC9zeXNjYWxsZW50Lmg6IEZpbGwgaW4gdGhlIG5ldwoJc3lzX2ZsYWdzIG1lbWJlciBmb3IgZWFjaCBkZWZpbmVkIHN5c3RlbSBjYWxsLgoKRnJpIERlYyAgOCAwMToxNzoyOCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGRlZnMuaCAoVFJBQ0VfKik6IE5ldyBmbGFncyB0byBkZXNjcmliZSB3aGF0IGNsYXNzCglvZiBzeXN0ZW0gY2FsbCBlYWNoIHN5c3RlbSBjYWxsIGlzLgoJKHN5c2VudCk6IEFkZCBzeXNfZmxhZ3MgbWVtYmVyLgoJKiBzeXNjYWxsLmMgKHN5c2VudCk6IERlZmluZSAoYW5kIGxhdGVyIHVuZGVmKSBhYmJyZXZpYXRpb25zCglmb3IgdGhlIHN5c3RlbSBjYWxsIGNsYXNzIGZsYWdzLgoJKGxvb2t1cF9jbGFzcyk6IE5ldyBmdW5jdGlvbiB0byB0cmFuc2xhdGUgc3RyaW5ncyB0bwoJc3lzdGVtIGNhbGwgY2xhc3MgZmxhZ3MuCgkocXVhbGlmeSk6IEhhbmRsZSBuZXcgc3lzdGVtIGNhbGwgY2xhc3MgbWVjaGFuaXNtLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEZpbGwgaW4gdGhlIG5ldyBzeXNfZmxhZ3MgbWVtYmVyCglmb3IgZWFjaCBkZWZpbmVkIHN5c3RlbSBjYWxsLgoKCSogZGVmcy5oIChwcmludF9zb2NrKTogUmVtb3ZlIHJlZHVuZGFudCBhbmQgbm9uLUsmUiBDCgljb21wYXRpYmxlIHByb3RvdHlwZS4gIEZyb20gSnVlcmdlbiBXZWlnZXJ0Cgk8am53ZWlnZXJAaW1tZDQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+LgoKVGh1IERlYyAgNyAwMToxNzo0MCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBUd2VhayB0byBpbXByb3ZlIGlvY3RsIGFjY3VyYWN5LgoJRnJvbSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgoJKiBzeXN0ZW0uYyAoaW5jbHVkZXMpIFtMSU5VWF06IEFkZCBsaW51eC9uZnMuaCBmb3IgcmVjZW50CglrZXJuZWxzLiAgRnJvbSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgpXZWQgRGVjICA2IDIxOjUyOjI4IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogZmlsZS5jIChzcHJpbnRmc3R5cGUpOiBFbmNsb3NlIHN0cmluZyByZXN1bHQgaW4gZG91YmxlCglxdW90ZXMuCgoJKiB0aW1lLmMgKHN5c19hZGp0aW1leCkgW0xJTlVYXTogQ29uZGl0aW9uYWxpemUKCWNvbnN0YW50bHkgZXZvbHZpbmcgdGltZXggc3RydWN0dXJlLgoJRnJvbSBBYXJvbiBVY2tvIDxVQ0tPQFZBWDEuUk9DS0hVUlNULkVEVT4uCgoJKiBkZWZzLmgsIHN5c2NhbGwuYywgc3RyYWNlLmM6IFJlbmFtZSBzeXNjYWxsIHRvCgl0cmFjZV9zeXNjYWxsIGFuZCBjaGFuZ2UgcHJvdG90eXBlIGFuZCBhbGwgY2FsbGVycwoJYmVjYXVzZSBvZiBicm9rZW4gTGludXggc2hhcmVkIGxpYnJhcmllcy4KCUZyb20gQWFyb24gVWNrbyA8VUNLT0BWQVgxLlJPQ0tIVVJTVC5FRFU+LgoKCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogQ2hlY2sgZm9yIGEgZmlsZSB3aXRoIHRlc3QgLWYgbm90Cgl0ZXN0IC1kLiAgRnJvbSBBYXJvbiBVY2tvIDxVQ0tPQFZBWDEuUk9DS0hVUlNULkVEVT4uCgpUdWUgU2VwIDI2IDAyOjMyOjMxIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC43IGlzIHJlbGVhc2VkLgoKCSogdXRpbC5jIChzdHJpbmdfcXVvdGUpOiBGaXggdGhpbmtvIHdoaWNoIGNhdXNlZCBjb3JlCglkdW1wcyBmb3Igc3RyaW5ncyB3aXRoIHF1b3RlcyBpbiB0aGVtLgoJUmVwb3J0ZWQgYnkgTWFydHkgTGVpc25lciA8bGVpc25lckBzZHNwLm1jLnhlcm94LmNvbT4uCgoJKiBsaW51eC9NYWtlZmlsZS5pbiAoZXJybm9lbnQuaCBydWxlKTogR3JhYiBhbGwgZXJybm8uaAoJZmlsZXMgZnJvbSAvdXNyL2luY2x1ZGUsIG5vdCBqdXN0IHRoZSBsaW51eCBvbmUuCglGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCgkqIGxpbnV4L2Vycm5vZW50LnNoOiBUb3RhbCByZXdyaXRlIHRvIGhhbmRsZSBtb3JlIGlvY3RscyB3aXRoCglmZXdlciBmYWxzZSBwb3NpdGl2ZXMgb24gbW9yZSBrZXJuZWwgZmxhdm9ycy4KCUZyb20gTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKTW9uIFNlcCAgNCAwMToyOToyMiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuNiBpcyByZWxlYXNlZC4KCgkqIGxpbnV4L2R1bW15LmgsIGxpbnV4L3N5c2NhbGwuaCwgbGludXgvc3lzY2FsbGVudC5oOiBBZGQKCXN5c19tc3luYy4KCSogbWVtLmMgKG1jdGxfZnVuY3MsIG1jdGxfbG9ja2FzLCBzeXNfbWN0bCk6IENvbmRpdGlvbmFsaXplCglvbiBNQ19TWU5DIGluc3RlYWQgb2YgSEFWRV9NQ1RMLgoJKG1jdGxfc3luYyk6IENvbmRpdGlvbmFsaXplIG9uIE1TX0FTWU5DIGluc3RlYWQgb2YgSEFWRV9NQ1RMLgoJKHN5c19tc3luYyk6IE5ldyBmdW5jdGlvbi4KClNhdCBTZXAgIDIgMTI6MDY6MDQgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBsaW51eC9kdW1teS5oLCBsaW51eC9zeXNjYWxsLmgsIGxpbnV4L3N5c2NhbGxlbnQuaDogQWRkCglzeXNfZmxvY2sgYW5kIHN5c19nZXRkZW50cy4KCSogZGVzYy5jIChmbG9ja2NtZHMsIHN5c19mbG9jayk6IENvbmRpdGlvbmFsaXplIG9uIExPQ0tfU0gKCW5vdCBTVU5PUzQuCgkqIGZpbGUuYyAoc3lzX2dldGRlbnRzKTogRGVmaW5lIHVuY29uZGl0aW9uYWxseSBhbmQgaGFuZGxlCglMSU5VWCBjYXNlLgoJKiBzdHJhY2UuYyAobWFpbik6IERpc2FsbG93IHVzZXJuYW1lIG9wdGlvbiB1bmxlc3MgYm90aCByZWFsCglhbmQgZWZmZWN0aXZlIHVpZHMgYXJlIHJvb3QuCgpXZWQgQXVnIDMwIDAxOjI5OjU4IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogc3RyYWNlLmMgKG1haW4pOiBFbnN1cmUgdGhhdCBydW5fdWlkIGFuZCBydW5fZ2lkIGFyZQoJYWx3YXlzIHNldCB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bC4KCShtYWluLCBuZXdvdXRmKSBbIVNWUjRdOiBTd2FwIHJlYWwgYW5kIGVmZmVjdGl2ZSB1aWRzIHdoaWxlCglvcGVuaW5nIGFueSBvdXRwdXQgZmlsZXMuCgkobWFpbikgWyFTVlI0XTogVHJlYXQgZWZmZWN0aXZlIHVpZCBvZiByb290IGFzIGEgcmVxdWVzdAoJdG8gaGFuZGxlIHN1aWQgYmluYXJpZXMgY29ycmVjdGx5IHVzaW5nIHRoZSByZWFsIHVpZCBvZgoJdGhlIGludm9raW5nIHVzZXIuCgpTYXQgQXVnIDE5IDAwOjA2OjA4IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogTWFrZWZpbGUuaW46IEFkZCBgfHwgdHJ1ZScgdG8gY2xlYW4gcnVsZSBiZWNhdXNlCglhbHRob3VnaCBHTlUgbWFrZSAzLjc0IHVzZXMgYHNoIC1jJyB0byBpbnZva2UgY29tbWFuZHMKCWV2ZXJ5IG90aGVyIG1ha2UgaW4gdGhlIHdvcmxkIHVzZXMgYHNoIC1lYycuCgoJKiBzeXNjYWxsLmMgKHN5c2NhbGwpIFtTVlI0LCBNSVBTXTogVGhlIGZpZnRoIGFuZCBzdWJzZXF1ZW50Cglhcmd1bWVudHMgYXBwZWFyIHRvIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2ssIG5vdCBpbiB0aGUKCXJlZ2lzdGVycyBmb2xsb3dpbmcgQTMgKGVtcGlyaWNhbCByZXN1bHQpLgoKCSogZGVmcy5oOiBBZGQgcHJvdG90eXBlIGZvciBwcmludHNvY2suCgkqIHN2cjQvZHVtbXkuaDogUmVtb3ZlIGdlbmVyaWMgaGFuZGxpbmcgb2Ygc3lzX21vdW50LgoJKiBzeXN0ZW0uYyBbU1ZSNCwgTUlQU106IEluY2x1ZGUgc2V2ZXJhbCBzeXN0ZW0gaGVhZGVycyB0byBjbGVhbmx5CglnZXQgYWNjZXNzIHRvIFNHSSBtb3VudCBpbmZvcm1hdGlvbi4KCShtb3VudF9mbGFncywgbmZzX2ZsYWdzKSBbU1ZSNCwgTUlQU106IE5ldyBvYmplY3RzLgoJKHN5c19tb3VudCkgW1NWUjQsIE1JUFNdOiBOZXcgZnVuY3Rpb24uCgkoc3lzX21vdW50KSBbU1ZSNCwgIU1JUFNdOiBOZXcgZnVuY3Rpb24uCgpUdWUgSnVsICA0IDAwOjMwOjM0IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC41IGlzIHJlbGVhc2VkLgoKCSogZGVzYy5jLCByZXNvdXJjZS5jLCBzdHJhY2UuYywgc3lzY2FsbC5jLCB0aW1lLmM6IENhc3QgdHZfc2VjIGFuZAogCXR2X3VzZWMgbWVtYmVycyB0byBsb25nIHdoZW4gdXNpbmcgcHJpbnRmLgoKCSogaXBjLmM6IE9taXQgZGVmaW5lIG9mIF9fS0VSTkVMX18uCgkoe01TRyxTRU0sU0hNfV97U1RBVCxJTkZPfSk6IEV4cGxpY2l0bHkgZGVmaW5lIHRob3NlIHRoaW5ncyB3ZQogCXdhbnQgd2hpY2ggX19LRVJORUxfXyB1c2VkIHRvIHByb3ZpZGUuCgkoc3lzX21zZ3Jjdik6IENoYW5nZSByZWZlcmVuY2UgdG8gaXBjX2tsdWRnZSBzdHJ1Y3R1cmUgdG8KCWxvb2stYWxpa2UgaXBjX3dyYXBwZXIgdG8gYXZvaWQgZGVwZW5kZW5jZSBvbiBfX0tFUk5FTF9fLgoKCW1lbS5jIChtbWFwX2ZsYWdzKSBbTUFQX3tHUk9XU0RPV04sREVOWVdSSVRFLEVYRUNVVEFCTEV9XTogQWRkCiAJTGludXggc3BlY2lmaWMgb3B0aW9ucy4KCglzeXNjYWxsLmM6IFVzZSBTWVNfRVJSTElTVF9ERUNMQVJFRCBpbnN0ZWFkIG9mIGd1ZXNzaW5nLgogIAlbRXtSRVNUQVJUe1NZUyxOT3tJTlRSLEhBTkR9fSxOT0lPQ1RMQ01EfV06IEV4cGxpY2l0bHkgZGVmaW5lCiAJaW5zdGVhZCBvZiBkZXBlbmRpbmcgb2YgX19LRVJORUxfXy4KCgl0ZXJtLmM6IENhc3QgY197aSxvLGMsbH1mbGFnIHRvIGxvbmcgd2hlbiB1c2luZyBwcmludGYuCgpUdWUgSnVuICA2IDAwOjI3OjQ4IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogYWNsb2NhbC5tNCAoQUNfREVDTF9TWVNfRVJSTElTVCwgQUNfREVDTF9fU1lTX1NJR0xJU1QpOiBOZXcuCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19ERUNMX1NZU19FUlJMSVNULCBBQ19ERUNMX1NZU19TSUdMSVNULAoJYW5kIEFDX0RFQ0xfX1NZU19TSUdMSVNULgoJKiBhY2NvbmZpZy5oIChTWVNfRVJSTElTVF9ERUNMQVJFRCk6IE5ldy4KCSogc3RyYWNlLmMgKHN0cmVycm9yKTogVXNlIFNZU19FUlJMSVNUX0RFQ0xBUkVELgoJKHN0cnNpZ25hbCk6IFVzZSBTWVNfU0lHTElTVF9ERUNMQVJFRC4KCgluZXQuYyAoc3lzX3NvY2tldCk6IE9taXQgaW5hZHZlcnRlbnQgc3VycGx1cyBjb21tYSB3aGVuCglwcm90b2NvbCBmYW1pbHkgaXNuJ3QgUEZfSU5FVC4KCgl1dGlsLmMgKGR1bXBzdHIpOiBGaXggaW5jb3JyZWN0IHByaW50aW5nIG9mIG9uZSB0b28gbWFueQoJY2hhcmFjdGVycyB3aGVuIHRoZSBsZW5ndGggaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCglSZXBvcnRlZCBieSBKdWVyZ2VuIFdlaWdlcnQKCTxqbndlaWdlckBpbW1kNC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4uCgpUaHUgTWF5ICA0IDIzOjM3OjQ3IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogaW9jdGwuYyAoY29tcGFyZSk6IENoYW5nZSBwcm90b3R5cGUgdG8gbWF0Y2ggUE9TSVggcXNvcnQuCgkqIHNpZ25hbC5jIChzaWdpc2hhbmRsZWQpIFtTVlI0XTogT21pdCBldmVyeXRoaW5nIGFmdGVyIHJldHVybi4KCSogc3RyYWNlLmMgKHRyYWNlKSBbU1ZSNF06IEJyZWFrIG91dCBvZiBmb3IgbG9vcCBpbnN0ZWFkIG9mCglyZXR1cm5pbmcgd2hlbiBmaW5pc2hlZCBzbyBmaW5hbCByZXR1cm4gc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgoJKiBzeXNjYWxsLmMgKGludGVybmFsX3N5c2NhbGwpOiBBZGQgbW9yZSBTWVNfd2FpdCogdmFyaWF0aW9ucy4KCShzeXNjYWxsKSBbTElOVVhdOiBDb3JyZWN0IHR5cG8gd2hpY2ggY29tbWVudGVkIG91dCB0aGUgTTY4SwoJYXJndW1lbnQgdG8gaWZkZWYuCgkqIHV0aWwuYyAocHJpbnRzdHIpOiBDYXN0IHVuc2lnbmVkIGNoYXIgcG9pbnRlciBhcmd1bWVudAoJdG8gY2hhciBwb2ludGVyIGluIHVtb3Zlc3RyIGNhbGwuCgkoZHVtcHN0cik6IExpa2V3aXNlIGZvciB1bW92ZW4uCgpXZWQgTWF5ICAzIDAxOjEwOjU2IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC40IGlzIHJlbGVhc2VkLgoKCSogc2lnbmFsLmMgKHN5c19zaWdibG9jayk6IE1vdmUgYWZ0ZXIgdGhlIGRlZmluaXRpb24gb2YKCXN5c19zaWdzZXRtYXNrIHRoYXQgaXQgY2FsbHMgdG8gYXZvaWQgYW4gaW1wbGljaXQgZGVjbGFyYXRpb24uCgkqIHN0cmVhbS5jICh0cmFuc3BvcnRfdXNlcl9vcHRpb25zLCB0cmFuc3BvcnRfc2VydmVyX29wdGlvbnMpOgoJT25seSBuZWVkZWQgaWYgVElfQklORCBpcyBkZWZpbmVkLgoJKiBjb25maWd1cmUuaW46IEFkZCAtV25vLWltcGxpY2l0IHRvIFdBUk5GTEFHUyBvbiBTdW5PUyA0LnguCgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2ZvcmspIFtTVlI0XTogRml4IGEgdHlwbyB0aGF0IG9taXR0ZWQKCXRoZSB0Y3AgYXJndWVtZW50IGZyb20gdGhlIGNhbGwgdG8gZXhpdGluZy4gIEFkZCBnZXRydmFsMgoJY2hlY2sgc28gbm8gZm9yayBwcm9jZXNzaW5nIGlzIGRvbmUgaW4gdGhlIGNoaWxkLgoJKHByaW50d2FpdG4pOiBJbml0aWFsaXplIGV4aXRlZCBzbyB0aGF0IGl0cyB2YWx1ZSBpcyBkZWZpbmVkCglmb3IgYWxsIGZsb3dzIG9mIGV4ZWN1dGlvbi4KClR1ZSBNYXkgIDIgMjI6Mzk6NDIgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBsaW51eC9kdW1teS5oOiBBZGQgYWxpYXNlcyBmb3Igc3lzZnMsIHBlcnNvbmFsaXR5LCBhZnNfc3lzY2FsbCwKCXNldGZzdWlkLCBzZXRmc2dpZCwgYW5kIF9sbHNlZWsgc3lzY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkIHByb3RvdHlwZXMgZm9yIHRoZW0uCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogQWRkIHRoZW0gdG8gdGhlIHN5c2NhbGwgZW50cmllcyB0YWJsZS4KCSogc3lzdGVtLmMgKGhlYWRlcnMpIFtMSU5VWF06IEluY2x1ZGUgbGludXgvdW5pc3RkLmggdG8gZ2V0IF9fTlJfKgoJZGVmaW5lcyBhbmQgY29uZGl0aW9uYWxseSBpbmNsdWRlIGxpbnV4L3BlcnNvbmFsaXR5LmggaWYKCV9fTlJfcGVyc29uYWxpdHkgaXMgZGVmaW5lZC4KCShwZXJzb25hbGl0eV9vcHRpb25zKSBbTElOVVhdOiBOZXcgdGFibGUuCgkoc3lzX3BlcnNvbmFsaXR5KSBbTElOVVhdOiBOZXcgZnVuY3Rpb24uCgpUdWUgTWF5ICAyIDAwOjIwOjM5IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogc3RyYWNlLmMgKHRyYWNlKSBbIVNWUjRdOiBDaGFuZ2UgZm9yZXZlciBsb29wIHRvIG9uZSBwcmVkaWNhdGVkCglvbiB0aGUgbnVtYmVyIG9mIHRyYWNlZCBwcm9jZXNzZXMgc28gdGhhdCB3ZSBjYW4gaGF2ZSB1bnRyYWNlZAoJY2hpbGRyZW4gKGUuZy4gdmlhIHBvcGVuKS4KCgkqIHN0cmFjZSAobWFpbikgWyFTVlI0XTogQ2FsbCBmYWtlX2V4ZWN2ZSB0byBnZXQgdGhlIGFjdHVhbAoJZXhlYyBhbmQgaXRzIGFyZ3VtZW50cyBpbnRvIHRoZSB0cmFjZS4KCShlbnZpcm9uKTogRGVjbGFyZSBpdC4KCSogcHJvY2Vzcy5jIChmYWtlX2V4ZWN2ZSk6IE5ldyBmdW5jdGlvbi4KCShoZWFkZXJzKTogSW5jbHVkZSBzeXMvc3lzY2FsbC5oIHRvIGdldCBTWVNfKiBkZWZpbmVzLgoKCSogcHJvY2Vzcy5jIChzeXNfZXhlY3YsIHN5c19leGVjdmUpOiBTdXJyb3VuZCBhcmd1bWVudCBhbm5vdGF0aW9ucwoJd2l0aCBDIGNvbW1lbnQgZGVsaW1pdGVycy4KCShwcmludGFyZ3YsIHByaW50YXJnYyk6IFRoZSBhcmcgdmVjdG9yIGlzIGFuIGFycmF5IG9mIGNoYXIgcG9pbnRlcnMKCW5vdCBpbnRzLgoKCSogc3RyYWNlLmMgKHByaW50bGVhZGVyKTogQWxzbyBjaGVjayBmb3IgbXVsdGlwbGUgLXAgYXJndW1lbnRzCgl3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gcHJpbnQgdGhlIHBpZCBmaWVsZC4KCgkqIHN0cmFjZS5jIChzdHJlcnJvcikgWyFIQVZFX1NUUkVSUk9SXTogTmV3IGZ1bmN0aW9uLgoJKiBkZWZzLmggKHN0cmVycm9yLCBzdHJzaWduYWwpOiBBZGQgdGhlc2UgcHJvdG90eXBlcyBpZiB3ZSBwcm92aWRlCgl0aGUgZnVuY3Rpb25zLgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0ZVTkNTKTogQWRkIHN0cmVycm9yLgoKCSogc3RyYWNlLmMgKG1haW4sIHByb2NfcG9sbGVyKTogQWRkIFNJR1BJUEUgdG8gdGhlIGxpc3Qgb2YgY2F1Z2h0CglhbmQgYmxvY2tlZCBzaWduYWxzLgoKCSogc3RyYWNlLmMgKG1haW4pOiBBZGQgdXNlcm5hbWUgb3B0aW9uLiAgVmVyaWZ5IHRoZXkgYXJlIHJvb3QgYmVmb3JlCglsZXR0aW5nIHRoZW0gdXNlIGl0LiAgTG9vayB1cCB0aGUgaWRzIGluIHRoZSBwYXNzd29yZCBmaWxlLiAgU2V0Cgl0aGVtIGp1c3QgYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvZ3JhbS4KCUZyb20gUmV1YmVuIFN1bW5lciA8cmFzdW1uZXJAdW5kZXJncmFkLm1hdGgudXdhdGVybG9vLmNhPi4KClNhdCBBcHIgMjkgMDA6MDk6NTYgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjMgaXMgcmVsZWFzZWQuCgoJKiBzeXN0ZW0uYyAobW91bnRfZmxhZ3MpIFtMSU5VWF06IE9taXQgZHVwbGljYXRlZCBNU19OT1NVSUQgZW50cnkuCglGcm9tIFJldWJlbiBTdW1uZXIgPHJhc3VtbmVyQHVuZGVyZ3JhZC5tYXRoLnV3YXRlcmxvby5jYT4uCgoJKiBzdHJhY2UuYyAob3V0Zm5hbWUpOiBJbml0aWFsaXplIHRvIE5VTEwuCgkobWFpbik6IERlZmVyIG91dHB1dCBmaWxlIHByb2Nlc3NpbmcgdW50aWwgYWZ0ZXIgYXJndW1lbnRzLgoJQWxsb3cgZWl0aGVyIGEgcGlwZSBvciBhIGJhbmcgZm9yIGNvbW1hbmQgYXJndW1lbnRzLgoJQ2hlY2sgaWYgb3V0Zm5hbWUgaXMgTlVMTCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dGYgZm9yIHN0ZGVyci4KCVJlaW5pdGlhbGl6ZSBlYWNoIHN0YXJ0dXAgVENCJ3Mgb3V0ZiB0byBmaXggLXAvLW8gb3JkZXJpbmcgYnVnLgoJKGRyb3B0Y2IpOiBSZXNldCBjbG9zZSBUQ0IncyBvdXRmIHRvIE5VTEwgaW5zdGVhZCBvZiBzdGRlcnIuCgkodHByaW50Zik6IEF2b2lkIGNhbGxpbmcgdmZwcmludGYgaWYgb3V0ZiBpcyBOVUxMLgoKCSogc3RyYWNlLmMgKG1haW4pOiBVc2UgcG9wZW4gaWYgLW8gYXJndW1lbnQgYmVnaW5zIHdpdGggYSBwaXBlLgoJRnJvbSBNYXJ0eSBMZWlzbmVyIDxsZWlzbmVyQHNkc3AubWMueGVyb3guY29tPi4KCgkqIHByb2Nlc3MuYyAocHJpbnRzdGF0dXMpOiBGaXggYSB0eXBvIHdoZXJlIFdJRlNJR05BTEVEIHdhcyBtZWFudAoJYnV0IFdJRlNUT1BQRUQgd2FzIHVzZWQuCgoJKiBNYWtlZmlsZS5pbjogQWRkIGFuIEVYVFJBX0RFRlMgdmFyaWFibGUgYW5kIHVzZSBpdCBpbiB0aGUgLmMubwoJcnVsZSB0byBwcmV2ZW50IHRoZSBjb21tZW50IGZyb20gYmVpbmcgdW50cnVlLgoKRnJpIEFwciAyOCAyMjowMTo1NiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHN0cmFjZS5jIChzeXNfZXhpdCk6IE1vdmUgZm9sbG93IGZvcmsgY29kZSB0byBpbnRlcm5hbF9leGl0LgoJKHN5c19mb3JrKTogTW92ZSBmb2xsb3cgZm9yayBjb2RlIHRvIGludGVybmFsX2ZvcmsuCgkoc3lzX2V4ZWN2LCBzeXNfZXhlY3ZlKTogTW92ZSBmb2xsb3cgZm9yayBjb2RlIHRvIGludGVybmFsX2V4ZWMuCgkoc3lzX3dhaXRwaWQsIHN5c193YWl0NCk6IE1vdmUgZm9sbG93IGZvcmsgY29kZSB0byBpbnRlcm5hbF93YWl0LgoJKHZmb3JraW5nKTogUmVtb3ZlIHRoaXMgc3RhdGljIHZhcmlhYmxlIGFuZCBjaGVjayBzY25vIGluCglpbnRlcm5hbF9mb3JrIGluc3RlYWQuCgkoaW50ZXJuYWxfZXhpdCwgaW50ZXJuYWxfZm9yaywgaW50ZXJuYWxfZXhlYywgaW50ZXJuYWxfd2FpdCk6IE5ldwoJZnVuY3Rpb25zLgoJKiBkZWZzLmg6IEFkZCBwcm90b3R5cGVzIGZvciB0aGUgbmV3IGludGVybmFsXyogZnVuY3Rpb25zLgoJKiBzeXNjYWxsLmMgKHN5c2NhbGwpOiBNb3ZlIHN5c2NhbGwgZW50ZXJpbmcgdHJhY2UgcXVhbGlmaWVyIGNoZWNrCglhbmQgcmVwcmludCBjaGVja2luZyBhZnRlciBjb250ZXh0IGRlY29kaW5nIGFuZCBwcmVjZWRlIHRoZW0gd2l0aAoJYSBjYWxsIHRvIGludGVybmFsX3N5c2NhbGwuICBQcmVjZWRlIHN5c2NhbGwgZXhpdGluZyB0cmFjZQoJcXVhbGlmaWVyIGNoZWNrIHdpdGggYSBjYWxsIHRvIGludGVybmFsX3N5c2NhbGwuCgkoaW50ZXJuYWxfc3lzY2FsbCk6IE5ldyBmdW5jdGlvbi4KCgkqIGRlZnMuaCAoc3RydWN0IHRjYik6IE1ha2Ugc2NubyBzaWduZWQuCgkqIHN0cmFjZS5jIChzeXNjYWxsKSBNYWtlIHVfZXJyb3Igc2lnbmVkLgoJW0xJTlVYLCBJMzg2XTogQXZvaWQgdW5zaWduZWQgY2FzdCBpbiBlYXggY2hlY2suCgkqIHN5c2NhbGwuYyAoc3lzX2luZGlyKTogTWFrZSBpLCBzY25vLCBhbmQgbmFyZ3Mgc2lnbmVkLgoJKiBkZXNjLmMgKHN5c19zZWxlY3QpOiBNYWtlIGN1bWxlbiB1bnNpZ25lZAoKTW9uIEFwciAyNCAyMzo1Mjo0NyAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIG5ldC5jIChzb2NrdHlwZXMpOiBBZGQgU09DS19QQUNLRVQuCgpTdW4gQXByICAyIDIzOjUwOjM5IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogTWFrZWZpbGUgKGNsZWFuKTogQ2hlY2sgZXhwbGljaXRseSBmb3IgYSBNYWtlZmlsZSBpbiBzdWJkaXJzCgliZWZvcmUgcnVubmluZyBtYWtlIGluIHRoZW0uCgpTdW4gTWFyIDI2IDEyOjM3OjIxIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogc3RyYWNlLmMgW01JUFNdIChwcm9jX29wZW4pOiBDb25kaXRpb25hbGl6ZSBydW4gb24gTUlQUy4KCVtNSVBTXSAoZGV0YWNoKTogSW5pdGlhbGl6ZSBlcnJvciBmb3IgTUlQUyBjYXNlLgoJKHRyYWNlKTogSW5pdGlhbGl6ZSBpb2N0bF9yZXN1bHQgYW5kIGlvY3RsX2Vycm5vIGZvciBvdmVybHkgaGVscGZ1bAoJY29tcGlsZXJzLgoJKiBzeXNjYWxsLmMgKGRlY29kZV9zdWJjYWxsKTogTW92ZSB2YXJpYWJsZSBpIGludG8gY29uZGl0aW9uYWxzCgl0aGF0IHVzZSB1c2UgaXQuCgkqIHN5c3RlbS5jIChzeXNzZ2lfb3B0aW9ucyk6IENvbmRpdGlvbmFsaXplIFNHSV9SRUNWTE1TRyBhbmQKCVNHSV9TRVRfRlBERUJVRyB0aGF0IFNHSSBkZWNpZGVkIHRvIGRyb3AuICBJIGRvbid0IGhhdmUgdGhlIHN0b21hY2gKCXRvIGNoYW5nZSB0aGVtIGFsbC4KCSogdGVybS5jICh0ZXJtX2lvY3RsKTogRm9yY2UgW2NfW2lvY2xdZmxhZ3MgbWVtYmVycyB0byBsb25nIGJlZm9yZQoJcHJpbnRpbmcgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBzaXplIG9mIHRoZWlyIHR5cGUgaXMuCgkqIHV0aWwuYyBbU1ZSNCwgTUlQU10gKHVtb3Zlbik6IFByZXZlbnQgTUlQUyBmcm9tIHVzaW5nIHByZWFkIGV2ZW4KCWlmIGF1dG9jb25mIGRldGVjdHMgaXQgc2luY2UgaXQgc2VlbXMgdG8gZWl0aGVyIG5vdCB3b3JrIG9yIGRvCglzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBvbiBJcml4IDUuMy4KClN1biBNYXIgMjYgMDA6MDE6MTEgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjIgaXMgcmVsZWFzZWQuCgkqIGxpbnV4L2R1bW15Lmg6IE1ha2Ugc3lzX2ZjaGRpciBsaWtlIHN5c19jbG9zZSBpbnN0ZWFkIG9mIHByaW50YXJncwoJc28gdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFyZyBpcyBkZWNpbWFsLgoKU2F0IE1hciAyNSAyMjo1MDoxMyAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIG5ldC5jIFtMSU5VWF0gKHByb3RvY29scyk6IEV4cGxpY2l0bHkgZGVmaW5lIGFsbCBJUFBST1RPXyogZW50cmllcwoJYmVjYXVzZSBvbiBMaW51eCB0aGV5IGFyZSBlbnVtZXJhdG9ycy4KCgkqIHN5c3RlbS5jIFtMSU5VWF0gKG1vdW50X2ZsYWdzKTogSGFuZGxlIHJlbmFtaW5nIG9mIE1TX1NZTkMgdG8KCU1TX1NZTkNIUk9OT1VTLgoKCSogdXRpbC5jIChwcmludHh2YWwpOiBXaGVuIHRoZXJlIGlzIG5vIHRyYW5zbGF0aW9uLCBwcmludCB0aGUgYWN0dWFsCgludW1iZXIgZmlyc3QgYW5kIHRoZSB0aGUgZGVmYXVsdCB2YWx1ZSBhcyBhIEMgY29tbWVudC4KCgkqIG5ldC5jIChzeXNfc2VuZCwgc3lzX3NlbmR0bywgc3lzX3NlbmRtc2csIHN5c19nZXRzb2Nrb3B0LAoJc3lzX3NldHNvY2tvcHQpOiBDaGFuZ2UgZmlyc3QgYXJndW1lbnQgZnJvbSB1bnNpZ25lZCB0byBzaWduZWQgdG8KCWNhdGVyIHRvIHRoZSBmcmVxdWVudCBwcmFjdGljZSBvZiBjYWxsaW5nIHN5c3RlbSBjYWxscyB3aXRoIGEgZmlsZQoJZGVzY3JpcHRvciBvZiAtMS4KCSogbWVtLmMgKHN5c19tbWFwKTogTGlrZXdpc2UuCgpTdW4gTWFyIDE5IDEzOjUzOjUyIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogc2lnbmFsLmMgW0xJTlVYXSAoc2lnbmFsZW50KTogSGFuZGxlIG9sZCBhbmQgbmV3IHZhbHVlcyBvZiBTSUdJTy4KClN1biBEZWMgMTEgMjI6NTE6NTEgMTk5NCAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjEgaXMgcmVsZWFzZWQuCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW4sIGFjbG9jYWwubTQ6IENoYW5nZXMgZm9yIGF1dG9jb25mIDIuMC4KCSogY29uZmlnLmd1ZXNzLCBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIHRoZSBGU0YuCgkqIGluc3RhbGwtc2g6IE5ldyBmcm9tIHRoZSBGU0YuCgpNb24gRGVjICA1IDIwOjUxOjI5IDE5OTQgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogTWFrZWZpbGUuaW46IEFkZCBtNjhrIGFyY2guCgkqIGFjY29uZmlnLmggKE02OEspOiBBZGQgbTY4ayBkZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGRldGVjdGlvbiBvZiBhcmNoIG02OGsuCgkqIHByb2Nlc3MuYyBbTTY4S10gKHN0cnVjdF91c2VyX29mZnNldHMpOiBTdXBwb3J0IG02OGsgcmVnaXN0ZXJzIGFuZAoJb2Zmc2V0cy4KCSogc2lnbmFsLmMgW002OEtdIChzaWdjb250ZXh0X3N0cnVjdCk6IFN1cHBvcnQgbTY4ayBzaWdjb250ZXh0CglzdHJ1Y3R1cmUuCglbTTY4S10gKHN5c19zaWdyZXR1cm4pOiBTdXBwb3J0IG02OGsgc2lncmV0dXJuIGhhbmRsaW5nLgoJKiBzeXNjYWxsLmMgW002OEtdIChzeXNjYWxsKTogU3VwcG9ydCBtNjhrIHN5c2NhbGwgbnVtYmVyIHJlZ2lzdGVyCglhbmQgZXJybm8gaW4gZDAgaW5zdGVhZCBvZiBlYXguCgkqIHV0aWwuYyBbTTY4S10gKGdldHBjLCBwcmludGNhbGwsIHNldGJwdCwgY2xlYXJicHQpOiBTdXBwb3J0IG02OGsKCXByb2dyYW0gY291bnRlciBpbiBQVF9QQyBpbnN0ZWFkIG9mIEVJUC4KCVtNNjhLXSAoTE9PUCk6IFN1cHBvcnQgbTY4ayBsb29wIGluc3RydWN0aW9uLgoJRnJvbSBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPi4KCgkqIG1lbS5jIFtNQVBfQU5PTllNT1VTXSAobW1hcF9mbGFncyk6IENvcnJlY3QgaW5hZHZlcnRlbnQgcmVmZXJlbmNlCgl0byBNQVBfRklYRUQgaW5zdGVhZCBvZiBNQVBfQU5PTllNT1VTLgoJRnJvbSBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPi4KCgkqIHNpZ25hbC5jIFtMSU5VWF0gKHNpZ25hbGVudCk6IFNpZ25hbCAzMCBpcyBub3cgU0lHUFdSLgoJRnJvbSBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPi4KCk1vbiBEZWMgIDUgMDE6MDU6NDYgMTk5NCAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBkZWZzLmggKHRwcmludGYpOiBGaXggdHlwbyBpbiBub24tZ2NjIGFuc2kgcHJvdG90eXBlIGZvciB0cHJpbnRmLgoJUmVwb3J0ZWQgYnkgVGhhbmggTWEgPHRtYUBlbmNvcmUuY29tPi4KCgkqIHN0cmFjZS5jIChjbGVhbnVwKTogU2VuZCBTSUdDT05UIGJlZm9yZSBTSUdURVJNIGJlY2F1c2UgTGludXgKCTEuMS42MiBkb2Vzbid0IGNvbnRpbnVlIGEgdHJhY2VkIGNoaWxkIHdoZW4gdGhlIHBhcmVudCBleGl0cy4KCVJlcG9ydGVkIGJ5IE1hdHQgRGF5IDxtZGF5QGFydGlzb2Z0LmNvbT4uCgoJKiBzeXN0ZW0uYyBbTElOVVhdOiBJbmNsdWRlIG5ldGluZXQvaW4uaCBiZWZvcmUgYXJwYS9pbmV0LmguCgoJKiB1dGlsLmMgKHByaW50c3RyKTogRml4IGxvbmdzdGFuZGluZyBidWcgaW4gbm90YXRpbmcgc3RyaW5nCgljb250aW51YXRpb24uCgoJKiBzdHJhY2UuYyBbU1ZSNF0gKHByb2Nfb3Blbik6IFNwZWNpZmljYWxseSB3YWl0IGZvciB0aGUgY2hpbGQgdGhlCgljaGlsZCB0byBnbyBpbnRvIHRoZSBleGVjdmUgc3lzY2FsbCB0byBhdm9pZCBzcHVyaW91cyB0cmFjZXMuCglbTElOVVhdIChkZXRhY2gpOiBDb25kaXRpb25hbGl6ZSB0aGUgc3RhdHVzIHZhcmlhYmxlLgoKU3VuIERlYyAgNCAyMzoyMTo0MiAxOTk0ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgbWlwcyBhcmNoLgoJKiBhY2NvbmZpZy5oIChNSVBTKTogQWRkIG1pcHMgZGVmaW5lLgoJKiBjb25maWd1cmUuaW46IEFkZCBkZXRlY3Rpb24gb2Ygb3BzeXMgaXJpeDUgYW5kIGFyY2ggbWlwcy4gIENoZWNrCglmb3IgcHJjdGwgZnVuY3Rpb24uCglDaGVjayBmb3Igc3lzL3N5c2NvbmZpZy5oIGhlYWRlci4KCSogZGVmcy5oIChNQVhfQVJHUyk6IEJ1bXAgbWF4aW11bSBzeXNjYWxsIGFyZ3VtZW50cyBmcm9tIDggdG8gMzIuCgkqIGZpbGUuYyBbU1ZSNF06IEluY2x1ZGUgc3lzL2NyZWQuaC4KCShhY2Nlc3NfZmxhZ3MpOiBVcGRhdGUgYWNjZXNzIGZsYWdzIGZvciBTR0kuCgkoc3ByaW50dGltZSk6IENoYW5nZSB0eXBlIG9mIHNwcmludHRpbWUgYXJndW1lbnQgZnJvbSB1bnNpZ25lZAoJbG9uZyB0byB0aW1lX3QuCgkqIHByb2Nlc3MuYyBbSEFWRV9QUkNUTF06IEluY2x1ZGUgc3lzL3ByY3RsLmguCglbSEFWRV9QUkNUTF0gKHByY3RsX29wdGlvbnMsIHN5c19wcmN0bCk6IE5ldyBmb3IgU0dJLgoJKHByaW50c2lnaW5mbyk6IENvbmRpdGlvbmFsbHkgY29tcGlsZSBTSV9USU1FUiBhbmQgU0lfTUVTR1EuCglDYXN0IHNpX2JhbmQgbWVtYmVyIHRvIGxvbmcgYmVmb3JlIHByaW50aW5nLgoJKiBzaWduYWwuYyAoc2lnYWN0X2ZsYWdzKTogQWRkIF9TQV9CU0RDQUxMIGZvciBTR0kuCgkoc2lncHJvY21hc2tjbWRzKTogQWRkIFNJR19TRVRNQVNLMzIgZm9yIFNHSS4KCSogc3RyYWNlLmMgW1NWUjRdIFtNSVBTXToKCShmb29iYXIpOiBOZXcgZHVtbXkgc2lnbmFsIGhhbmRsZXIuCgkobWFpbik6IEluc3RhbGwgYSBkdW1teSBzaWduYWwgaGFuZGxlciBpbiB0aGUgY2hpbGQgYmVmb3JlIHBhdXNpbmcKCXRvIHdvcmsgYXJvdW5kIGFuIFNHSSBidWcgaW4gUFJTQUJPUlQuCgkocHJvY19vcGVuKTogU2VuZCBhIGludGVycnVwdCB0byB0aGUgY2hpbGQgaW5zdGVhZCBvZiBhYm9ydGluZyB0aGUKCXN5c2NhbGwgd2hpY2ggZG9lc24ndCB3b3JrIG9uIElyaXg1LjIuCgkqIHN2cjQvZHVtbXkuaDogQWRkIG5ldyB1bmZpbmlzaGVkIFNHSSBzeXNjYWxscwoJKGUuZy4gc3lzX3N5c21wLCBzeXNfc2dpbmFwLCBldGMuKS4gIEhhbmRsZSBzb21lIFNHSSBzeXNjYWxscyBsaWtlCglleGlzdGluZyBjYWxscyAoZS5nLiBzeXNfa3NpZ2FjdGlvbiBsaWtlIHN5c19zaWdhY3Rpb24pLgoJUHJpbnRhcmdzIGRvZXMgdGhlIHByaW50IHRoaW5nIGZvciBzeXNfc2V0aG9zdGlkLgoJKiBzdnI0L3N5c2NhbGwuaDogRGVjbGFyZSBhbGwgbmV3IFNHSSBzeXNjYWxscy4KCShTR0lfS0xVREdFKTogRGVmaW5lIHN5c2NhbGwgdGFibGUgc3RhcnRpbmcgaW5kZXggdG8gYmUgMSBmb3IgU0dJCglhbmQgYWRkIGl0IHRvIGFsbCBzdWJjYWxsIGVudHJ5IHBvaW50cy4KCShTWVNfcGdycHN5c19zdWJjYWxsLCBTWVNfc2lnY2FsbF9zdWJjYWxsLCBTWVNfY29udGV4dCk6IERvbid0CglkZWNvZGUgYXMgc3ViY2FsbHMgb24gTUlQUy4gSW5zdGVhZCwgdXNlIHRoZSBub3JtYWwgc3lzY2FsbHMuCgkqIHN2cjQvc3lzY2FsbGVudC5oIFtNSVBTXTogTGVhZCBzeXNjYWxsIHRhYmxlIHdpdGggYSBkdW1teSBlbnRyeQoJc2luY2UgU0dJIHN5c2NhbGwgbnVtYmVycyBhcmUgb2ZmIGJ5IG9uZS4KCVtNSVBTXSAoc3lzX3BncnBzeXMpOiBSZW5hbWUgdG8gc3lzX3NldHBncnAgb24gU0dJLgoJW01JUFNdIChzeXNfeGVuaXgpOiBSZW5hbWUgdG8gc3lzX3N5c3NnaSBvbiBTR0kuCglbTUlQU10gKHN5c19zeXNtYWNoaW5lKTogUmVuYW1lIHRvIHN5c19zeXNtaXBzIG9uIFNHSS4KCVtNSVBTXTogQ29uZGl0aW9uYWxpemUgU1ZSNCBleHRlbnNpb24gaW50byBTR0kgYW5kIFNvbGFyaXMgY2xhc3Nlcy4KCSogc3lzY2FsbC5jIChkdW1waW8pOiBWYWxpZGF0ZSBkZXNjcmlwdG9yIGFnYWluc3QgTUFYX1FVQUxTLgoJW0hBVkVfUFJfU1lTQ0FMTF0gKHN5c2NhbGwpOiBDb25kaXRpb25hbGl6ZSBTWVNfdmZvcmsuCglbTUlQU10gKHN5c2NhbGwpOiBBZGQgU0dJIHNlY3Rpb24gZm9yIGRlY29kaW5nIHVfZXJyb3IgYW5kIHVfcnZhbC4KCUFkZCB3b3JrYXJvdW5kIGZvciBicm9rZW4gU0dJIHByX3N5c2FyZyBvbiBzeXNjYWxsIGVudHJ5LgoJW1NWUjRdIChzeXNjYWxsKTogQ29uZGl0aW9uYWxpemUgc3ViY2FsbCBkZWNvZGluZyBmb3IKCVNZU19wdHJwc3lzX3N1YmNhbGwsIFNZU19zaWdjYWxsX3N1YmNhbGwgYW5kIFNZU19jb250ZXh0X3N1YmNhbGwuCglbU1ZSNF0gW01JUFNdIChnZXRydmFsMik6IEhhbmRsZSBTR0kuCgkqIHN5c2NhbGxlbnQuc2g6IERvcmsgdGhlIHNlZCBsaW5lIHRvIGJlIGNob29zaWVyIGFib3V0IFNZU18gbGluZXMuCgkqIHN5c3RlbS5jIFtIQVZFX1NZU0NPTkZJR19IXTogSW5jbHVkZSBzeXMvc3lzY29uZmlnLmguCglbTUlQU10gKHN5c3NnaV9vcHRpb25zLCBzeXNfc3lzc2dpKTogTmV3IGZvciBTR0kuCg==