MjAwNi0wNS0wMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoJCgkqID09PSBSZWxlYXNlZCAyLjExLjAgPT09CgoyMDA2LTAzLTI5ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX3N5bWJvbCk6IE1ha2Ugc3VyZSB0bwoJbm90IHJldHVybiBUUlVFIGlmIHN5bWJvbCBpcyBOVUxMLiAgKCMzMzQ0NDAsCglJVE9IIFlhc3VmdW1pKQoKMjAwNi0wMy0wNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09ICBSZWxlYXNlZCAyLjEwLjEgPT09CgoyMDA2LTAyLTI0ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xMC4wID09PQoKMjAwNi0wMi0xMCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuOS42ID09PQoKMjAwNi0wMS0yNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuOS41ID09PQoKMjAwNi0wMS0xOCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoJCgkqID09PSBSZWxlYXNlZCAyLjkuNCA9PT0KCjIwMDYtMDEtMTYgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjkuMyA9PT0KCjIwMDYtMDEtMDUgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjkuMiA9PT0KCjIwMDUtMTItMDkgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjkuMSA9PT0KCjIwMDUtMTEtMjggIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYyAocGFyc2VfbGlidG9vbF9hcmNoaXZlKTogU2lsZW5jZQoJY29tcGlsZXIgd2FybmluZ3MuCgoyMDA1LTExLTE3ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi45LjAgPT09CgoyMDA1LTA4LTIzICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi44LjEgPT09CgoyMDA1LTA4LTEyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi44LjAgPT09CgoyMDA1LTA4LTA1ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjcgPT09CgoyMDA1LTA4LTAzICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjYgPT09CgoyMDA1LTA4LTAyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjUgPT09CgoyMDA1LTA3LTIxICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjQgPT09CgoyMDA1LTA3LTE1ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjMgPT09CgkKMjAwNS0wNy0wOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBub3ZlbGwuY29tPgoKCSogTWFrZWZpbGUuYW06IERvbid0IHVzZSB0aGUgc2NyaXB0cyBpbiBidWlsZC93aW4zMiB0byBjb21waWxlCglnbW9kdWxlLnJjIGludG8gYSByZXNvdXJjZSBvYmplY3QgZmlsZS4gKFRoaXMgbWVhbnMgd2UgbG9zZSB0aGUKCWJ1aWxkIG51bWJlciBpbmNyZW1lbnQgbWFnaWMsIGJ1dCBJIGRvdWJ0IGl0IHdhcyB0aGF0IHVzZWZ1bAoJYW55d2F5LikgSW5zdGVhZCB1c2Ugd2luZHJlcyBkaXJlY3RseS4gVG8gcGFzcyB0aGUgbm9ybWFsIC5vIGZpbGUKCXByb2R1Y2VkIGJ5IHdpbmRyZXMgdGhyb3VnaCBsaWJ0b29sLCB3aGljaCB3YW50cyAubG8gZmlsZXMsIHBhc3MKCWl0IGRpcmVjdGx5IHRvIHRoZSBsaW5rZXIgdXNpbmcgYSAtV2wgb3B0aW9uLgoKCSogZ21vZHVsZS5yYy5pbjogVGh1cyByZXBsYWNlIEJVSUxETlVNQkVSIHdpdGggMC4KCjIwMDUtMDctMDggIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCQoJKiA9PT0gUmVsZWFzZWQgMi43LjIgPT09CgoyMDA1LTA2LTMwICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjEgPT09CgoyMDA1LTA2LTMwICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLWFyLmM6IEluY2x1ZGUgc3RkbGliLmgKCjIwMDUtMDYtMjYgIFRvciBMaWxscXZpc3QgIDx0bWxAbm92ZWxsLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBsaWJ0b29sIGluc3RhbGxzL3VuaW5zdGFsbHMgdGhlIGltcG9ydCBsaWJyYXJ5LCBubwoJbmVlZCB0byBkbyBpdCBvdXJzZWx2ZXMuIERvIHN0aWxsIGluc3RhbGwvdW5pbnN0YWxsIHRoZSAuZGVmIGZpbGUsCgl0aG91Z2guCgoyMDA1LTA2LTI0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1saWJ0b29sLWltcG9ydC1saWIpOiBDdXJyZW50IEdOVSB0b29scyBkbwoJdW5kZXJzdGFuZCB0aGUgUFJJVkFURSBrZXl3b3JkLgoKMjAwNS0wNi0xMCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy4wID09PQoKMjAwNS0wMS0wNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNi4xID09PQoKMjAwNC0xMi0zMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBJdCdzIHdyb25nIHRvIGNhbGwgZ19maWxlX3Rlc3QoKSB3aXRoCgltb3JlIHRoYW4gb25lIHRlc3QgKGJvdGggR19GSUxFX1RFU1RfRVhJU1RTIGFuZCBfSVNfUkVHVUxBUikuIChJdAoJd291bGQgc3VjY2VlZCBldmVuIGlmIHRoZSBwYXRobmFtZSBleGlzdGVkIGFzIGEgbm9ucmVndWxhciBmaWxlLikKCUp1c3QgR19GSUxFX1RFU1RfSVNfUkVHVUxBUiB3b3JrcyBmaW5lLiAoIzE2MjU5NCkKCjIwMDQtMTItMTYgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjYuMCA9PT0KCQoyMDA0LTEyLTA2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtCgkqIGdtb2R1bGUuZGVmCgkqIGdtb2R1bGUuW2hjXTogV2luMzIgRExMIEFCSSBzdGFiaWxpdHkgY3J1ZnQgbGlrZSBpbiAuLi9nbGliLgoKMjAwNC0xMi0wMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS43ID09PQoJCjIwMDQtMTEtMTIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuNiA9PT0KCQoyMDA0LTExLTA0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX29wZW4pOiBBcmd1bWVudCBpcyBpbiBVVEYtOC4gVXNlIHdpZGUKCWNoYXJhY3RlciBXaW4zMiBBUEkgaWYgcHJlc2VudC4KCgkqIGdtb2R1bGUuYyAocGFyc2VfbGlidG9vbF9hcmNoaXZlLCBnX21vZHVsZV9vcGVuKTogQ29udmVydCBmaWxlCgluYW1lIHRvIFVURi04IGJlZm9yZSBzdG9yaW5nIGluIHRoZSBlcnJvciBtZXNzYWdlIHN0cmluZy4KCgkqIGdtb2R1bGUuYyAocGFyc2VfbGlidG9vbF9hcmNoaXZlKTogVXNlIGdfb3BlbigpLgoKMjAwNC0xMS0wMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS41ID09PQoKMjAwNC0xMC0yNyBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjQgPT09CgoyMDA0LTA5LTE4IE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuMyA9PT0KCjIwMDQtMDgtMjUgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS4yID09PQoKMjAwNC0wOC0wMSBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjEgPT09CgpTdW4gSnVsIDE4IDE4OjAzOjA4IDIwMDQgIFNvZXJlbiBTYW5kbWFubiAgPHNhbmRtYW5uQGRhaW1pLmF1LmRrPgoKCSogPT09IFJlbGVhc2VkIDIuNS4wID09PQoKTW9uIE1heSAzMSAwMDowOToxMCAyMDA0ICBNYXR0aGlhcyBDbGFzZW4gIDxtYWNsYXNAZ214LmRlPgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgZ21vZHVsZS1hci5jLiAoIzg1OTMwLCBUb21hcyDWZ3JlbikKClR1ZSBNYXkgMTEgMjM6MjM6MjEgMjAwNCAgTWF0dGhpYXMgQ2xhc2VuICA8bWFjbGFzQGdteC5kZT4KCgkqIGdtb2R1bGUtYXIuYyAoX2dfbW9kdWxlX29wZW4pOiBNYWtlIGl0IGNvbXBpbGUgb24gQUlYLiAgCgkoIzE0MTE1OSwgTWljaGFlbCBXaWxzb24pCgoyMDA0LTAzLTMxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiBPbiBDeWd3aW4sIHVzZSB0aGUgImN5ZyIKCXByZWZpeCwgYW5kIGFjY2VwdCBhbHNvIHRoZSBub3JtYWwgImxpYiIuICgjMTM4NDAzLCBSb2dlciBMZWlnaCkKClR1ZSBGZWIgMjQgMTQ6MDk6MjEgMjAwNCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4zLjMgPT09CgpTdW4gRmViIDIyIDAyOjI4OjQzIDIwMDQgIE1hdHRoaWFzIENsYXNlbiAgPG1hY2xhc0BnbXguZGU+CgoJQnVnICM4NTkzMCwgTGF1cmVudCBWaXZpZXI6CgkKCSogZ21vZHVsZS1hci5jOiBJbXBsZW1lbnRhdGlvbiBvZiBuYXRpdmUgbW9kdWxlIG1hbmFnZW1lbnQgZm9yIEFJWC4KCSogZ21vZHVsZWNvbmYuaC5pbjogCgkqIGdtb2R1bGUuYzogU3VwcG9ydCBnbW9kdWxlLWFyLmMgCgoyMDAzLTAxLTAxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiBVc2UgZ19hc2NpaV9zdHJjYXNlY21wKCkuCgpUdWUgRGVjICAzIDIwOjU2OjE5IDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogUHJvcGVybHkgcmVmY291bnQgdGhlCgltYWluIG1vZHVsZSBpZiBpdCBpcyBhbHJlYWR5IG9wZW4uICgjOTg2NDgpCgpTYXQgTWFyICAyIDE0OjQ2OjE3IDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ21vZHVsZS1iZW9zLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKSAqIGdtb2R1bGUtZHlsZC5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCkgCgkgIGdtb2R1bGUtZGwuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiBVc2UgR19NT0RVTEVfU1VGRklYIHJhdGhlciB0aGFuCglhIGhhcmRjb2RlZCAiLnNvIi4gKCM3MjgwMykKClN1biBGZWIgMTcgMTg6MTU6MjIgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBGaXggdHlwbyB3aGVuIGNoZWNraW5nCglpZiBmaWxlICsgbW9kdWxlX3N1ZmZpeCBleGlzdHMuIChNaXJvc2xhdyBEb2JyemFuc2tpLU5ldW1hbm4sCgkjNzE4MDEpCgoyMDAxLTExLTI0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgcnVsZSBmb3IgdGVzdGdtb2R1bGUuZXhwLCB0b28uCgoyMDAxLTExLTIyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYzogQ3VycmVudCB3MzJhcGkgaGVhZGVycyBkbyBpbmNsdWRlIHRsaGVscDMyLmgsCglzbyBubyBuZWVkIHRvIGhhdmUgYW4gZXh0cmFjdCBmcm9tIGl0IGhlcmUuCgpNb24gTm92IDE5IDE2OjEyOjEyIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW0gbWFrZWZpbGUubXNjLmluIG1ha2VmaWxlLm1pbmd3LmluOiBSZW1vdmUKCXRlc3RnbW9kdWxlIGFuZCBhc3NvY2lhdGVkIHBsdWdpbiBmaWxlczsgd2UgZG9uJ3QgbmVlZCBfYm90aF8gdGhpcwoJYW5kIC4uL3Rlc3RzL21vZHVsZS10ZXN0LmMKCjIwMDEtMTEtMTYgIE1pY2hhZWwgTWVla3MgIDxtaWNoYWVsQHhpbWlhbi5jb20+CgoJKiBnbW9kdWxlLmMgKHBhcnNlX2xpYnRvb2xfYXJjaGl2ZSk6IGZpeCBsZWFrLgoKMjAwMS0xMC0zMCAgRGFuIFdpbnNoaXAgIDxkYW53QHhpbWlhbi5jb20+CgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBnbW9kdWxlLWR5bGQuYwoKMjAwMS0xMC0yMyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbTogKFdpbjMyKTogSWYgd2UgaGF2ZSBidWlsdCB0aGUgTVNWQyBpbXBvcnQgbGlicmFyeSwKCWluc3RhbGwgaXQuIEluc3RhbGwgdGhlIGdjYyBpbXBvcnQgbGlicmFyeS4gQWxzbyBzdXBwb3J0Cgl1bmluc3RhbGwuCgoyMDAxLTEwLTA5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiBNb3JlIFVuaXggY29tcGF0aWJpbGl0eToKCUFkZCAibGliIiBwcmVmaXggaW4gY2FzZSB0aGUgbW9kdWxlIG5hbWUgZG9lc24ndCBhbHJlYWR5IGhhdmUgaXQsCglleGNlcHQgaWYgaXQgZW5kcyB3aXRoICIuZGxsIiAoaW4gd2hpY2ggY2FzZSBpdCBwcm9iYWJseSBhbHJlYWR5CglpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBETEwpLiBUaGlzIGlzIG5lZWRlZCBmb3IgaW5zdGFuY2UgZm9yCgl0aGUgZ2RrLXBpeGJ1ZiBsb2FkZXJzLCB3aGljaCBhcmUgY2FsbGVkICJsaWIqLmRsbCIsIGJ1dAoJZ2RrLXBpeGJ1Zi1pbyBjYWxscyBnX21vZHVsZV9idWlsZF9wYXRoIHdpdGhvdXQgdGhlICJsaWIiIHByZWZpeC4KCjIwMDEtMTAtMDMgIGphY29iIGJlcmttYW4gIDxqYWNvYkB4aW1pYW4uY29tPgoKCSogbGliZ3BsdWdpbl9hLmM6IChncGx1Z2luX2FfbW9kdWxlX2Z1bmMpOiAKCSogZ21vZHVsZS5oOiBzL3JldHJpdmUvcmV0cmlldmUvCgoyMDAxLTA5LTI1ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLm1pbmd3LmluOiBGaXggbWlzc2luZyBlbmQgQCBpbiBATFRfQ1VSUkVOVEAuCgoJKiBtYWtlZmlsZS5tc2MuaW46IFVzZSBzYW1lIERMTCBhbmQgaW1wb3J0IGxpYnJhcnkgbmFtZXMgYXMKCWxpYnRvb2wuCgkKMjAwMS0wOS0xOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLnJjLmluOiBDb3JyZWN0IEludGVybmFsTmFtZSBhbmQgT3JpZ2luYWxGaWxlbmFtZSB0bwoJbWF0Y2ggd2hhdCB3ZSBhY3R1YWxseSBwcm9kdWNlLgoKMjAwMS0wOS0xOCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbTogT24gV2luMzIsIHBhc3MgYSBkdW1teSAtcnBhdGggZmxhZyB0byBsaWJ0b29sIHdoZW4KCWJ1aWxkaW5nIGxpYmdwbHVnaW5fW2FiXS5sYSwgb3RoZXJ3aXNlIGxpYnRvb2wgZG9lc24ndCBjcmVhdGUgYQoJRExMLCBidXQgYSBzdGF0aWMgYXJjaGl2ZS4KCjIwMDEtMDctMjAgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogbWFrZWZpbGUubXNjLmluIDogcmVmbGVjdCBnbGliIG1vdmUKCjIwMDEtMDUtMjEgIE1hcmsgTXVybmFuZSAgPE1hcmsuTXVybmFuZUBpcmVsYW5kLnN1bi5jb20+CgoJKiBnbW9kdWxlLmMgKGdfc3RyX2NoZWNrX3N1ZmZpeCk6ICBNb2RpZmllZCB0eXBlIG9mIHN0cmluZ19sZW4KCWFuZCBzdWZmaXhfbGVuIHRvIGJlIGdzaXplLiAgUHJvcGVybHkgYWNjb21tb2RhdGVzIHJldHVybiBmcm9tCglzdHJsZW4oKS4KCjIwMDEtMDUtMjkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX3NldF9lcnJvcl91bmR1cGVkKTogRG8gbm90IGdfc3RyZHVwLCBhcwoJcHJvbWlzZWQgaW4gdGhlIGZ1bmN0aW9uIG5hbWUuCgpUdWUgTWF5IDI5IDEyOjU3OjUxIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfc3ltYm9sKTogZXJrLCBzdHJjb25jYXQgbmVlZHMgTlVMTCBhcyBsYXN0IGFyZy4KCW1ha2Ugc3VyZSB3ZSBwYXNzIG1vZHVsZSBuYW1lIHdpdGggc3VmZml4IGludG8gYmFja2VuZCBvcGVuLgoKTW9uIE1heSAyOCAyMDoxOToyNSAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBhcyBhIGxhc3QgcmVzb3J0LCBpZiB3ZSBjYW4ndCBhY2Nlc3MoKQoJdGhlIG1vZHVsZSwgbGVhdmUgaXQgdXAgdG8gdGhlIHBsYXRmb3JtIGJhY2tlbmRzIHRvIGZpbmQgaXQuCgkoZml4ZXMgaW1wbGljaXQgc2VhcmNoIHBhdGNoIGxvYWRpbmcgaSBicm9rZSB3aXRoIG15IGxhc3QKCWNvbW1pdCwgc3BvdHRlZCBieSBQYWRyYWlnIE8nQnJpYWluKS4KClRodSBNYXkgMjQgMDM6NDM6MTIgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogcmVvcmRlcmVkIGNvZGUgc28gd2UgaGF2ZSBhIHNpbmdsZQoJbW9kdWxlIGxvYWRpbmcgcG9pbnQgKGZvciByZWxpYWJsZSBlcnJvciBtZXNzYWdlcykuIGRvIGFjY2VzcygpCgl0ZXN0cyB0byBmaWd1cmUgcGxhdXNpYmxlIGZpbGUgbmFtZXMuCgltYWtlIGVycm9yIG1lc3NhZ2VzIG1vcmUgdmVyYm9zZSBzbyB1c2VycyBjYW5maWd1cmUgd2hhdCdzIGdvaW5nIG9uLgoKMjAwMS0wNC0yMCAgRGFuIFdpbnNoaXAgIDxkYW53QHhpbWlhbi5jb20+CgoJKiBnbW9kdWxlLWR5bGQuYzogZ21vZHVsZSBpbXBsZW1lbnRhdGlvbiBmb3IgRGFyd2luL01hYyBPUyBYCgoJKiBnbW9kdWxlLmM6IAoJKiBnbW9kdWxlY29uZi5oLmluOiBBZGQgZ21vZHVsZS1keWxkIHN1cHBvcnQKCgkqIHRlc3RnbW9kdWxlLmMgKG1haW4pOiBGaXggc3BlbGxpbmcKCjIwMDEtMDMtMTMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCUZyb20gRWR3YXJkIE0uIExlZSAgPHRhaWxiZXJ0QHlhaG9vLmNvbT46CgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogdXNlIChjeWd3aW4gZnJpZW5kbHkpIGRpcgoJc2VwYXJhdG9yLgoKMjAwMS0wMy0xMiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbSAobGliZ3BsdWdpbl9hX2xhX0xJQkFERCwgbGliZ3BsdWdpbl9iX2xhX0xJQkFERCk6CglMaW5rIHdpdGggdGhlIGxpYmdtb2R1bGUgbGEgb25seSBvbiBXaW4zMi4KCjIwMDEtMDMtMTAgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW06IFVzZSB0aGUgX0xJQkFERCBkZXBlbmRlbmN5IG9uIGxpYmdsaWIgb25seSBvbiB0aGUKCVdpbjMyIHBsYXRmb3JtIChpbmNsdWRpbmcgQ3lnd2luKS4KCjIwMDEtMDMtMDcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBNYWtlZmlsZS5hbSwgbWFrZWZpbGUubWluZ3cuaW4sIG1ha2VmaWxlLm1zYy5pbjogU2V0CglHX0xPR19ET01BSU4gdG8gXCJHTW9kdWxlXCIgaW5zdGVhZCBvZiBnX2xvZ19kb21haW5fZ21vZHVsZS4KCgkqIGdtb2R1bGUuZGVmLCBnbW9kdWxlLmgsIGdtb2R1bGUuYzogUmVtb3ZlZCBnX2xvZ19kb21haW5fZ21vZHVsZS4KCjIwMDEtMDItMjEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS5oOiBVc2UgR19CRUdJTl9ERUNMUyBhbmQgR19FTkRfREVDTFMuIERlZmluZQoJR19NT0RVTEVfRVhQT1JUIGNvcnJlY3RseSBvbiBDeWd3aW4sIHRvby4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX29wZW4pOiBDb252ZXJ0IHBhdGggdG8gV2luZG93cyBmb3JtYXQKCW9uIEN5Z3dpbi4KCgkqIE1ha2VmaWxlLmFtIChsaWJnbGliKTogVXNlIGxpYmdsaWItMS4zLmxhIGZyb20KCXRvcF9idWlsZGRpci4gSW52b2tlIGxpYnRvb2wgd2l0aCAtbm8tdW5kZWZpbmVkIGZvciBXaW4zMiBhbmQKCUN5Z3dpbi4KCjIwMDEtMDItMTcgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgogICAgICAgIEFwcGxpZWQgcGF0Y2ggZnJvbSBTb2VyZW4gU2FuZG1hbm46CgkKCSogZ21vZHVsZS5jIChnX21vZHVsZV9lcnJvcik6IEdfQ09OU1RfUkVUVVJOCgkoZ19tb2R1bGVfbmFtZSk6IEdfQ09OU1RfUkVUVVJOCgpTYXQgRmViIDE3IDA3OjI3OjE1IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYzogd29yayBhcm91bmQgcGxhdGZvcm1zIHRoYXQgaGF2ZSBicm9rZW4gUlRMRF9HTE9CQUwuCgoyMDAxLTAxLTI3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUuYzogKFdpbjMyKSBOZWVkIDxpby5oPiBmb3Igb3BlbigpIGFuZCBjbG9zZSgpLgoKMjAwMC0xMi0yMiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtb2R1bGUuYzogTWFrZSBnX21vZHVsZV9vcGVuIG1vcmUgdG9sZXJhbnQgd3J0IHRvIHRoZSBtb2R1bGUKCW5hbWUuIEZpcnN0IGl0IHRyaWVzIHRvIG9wZW4gdGhlIG1vZHVsZSBhcyBuYW1lZCwgaWYgdGhhdCBmYWlscywKCWl0IGNoZWNrcywgd2hldGhlciBpdCBpcyBhIGxpYnRvb2wgYXJjaGl2ZSBhbmQgcGFyc2VzIGl0LCBpZiB0aGF0CglmYWlscyBpdCBhcHBlbmRzIHRoZSBzeXN0ZW1zIHNoYXJlZCBsaWJyYXJ5IHN1ZmZpeAoJKGkuZS4gIi5zbyIpIChpZiBub3QgYWxyZWFkeSBmb3VuZCkgYW5kIHRyaWVzIGFnYWluIGFuZCBpZiB0aGF0CglmYWlscyBpdCB0cmllcyB0byBhcHBlbmQgdGhlICIubGEiIGxpYnRvb2wgc3VmZml4IChpZiBub3QgYWxyZWFkeQoJZm91bmQpIGFuZCBwYXJzZXMgaXQuCgoJKiBnbW9kdWxlLmM6IExvY2sgcmVjdXJzaXZlIG11dGV4IGR1cmluZyBtb3N0IG1vZHVsZSBmdW5jdGlvbnMgZm9yCglzYWZldHkuCgoJKiBnbW9kdWxlLWRsLmM6IFJldHVybiBhbiBlcnJvciBmcm9tIF9nX21vZHVsZV9zeW1ib2wgb25seSwgaWYKCWRsZXJyb3Igc2F5cyBzby4gQWxsIG90aGVyIGZ1bmN0aW9ucyByZXR1cm4gYW4gZXJyb3IgYXMgd2VsbCwgaWYKCWRsZXJyb3IgcmV0dXJucyBOVUxMLgoKCSogdGVzdGdtb2R1bGUuYzogVGhhbmtzIHRvIHRoZSBhYm92ZSBjaGFuZ2UgdGhlICNpZmRlZnMgaGF2ZQoJdmFuaXNoZWQuCgoyMDAwLTEwLTE1ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogTWFrZWZpbGUuYW0gKEJVSUxUX0VYVFJBX0RJU1QpOiBOZXcgdmFyaWFibGUuCgkoZGlzdC1ob29rKTogSGFuZGxlICQoQlVJTFRfRVhUUkFfRElTVCkuCgoyMDAwLTA5LTI4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21vZHVsZS5oOiBNb3ZlZCBkZWNsYXJhdGlvbiBvZiBnX2xvZ19kb21haW5fZ21vZHVsZSB1cCBiZWZvcmUKCXRoZSBpbmNsdXNpb24gb2YgZ2xpYi5oIHRvIG1ha2UgaXQgY29tcGlsZSBvbiBub24tZ2NjIGNvbXBpbGVycy4KCjIwMDAtMDctMjIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUubWluZ3cuaW46IFJlbW92ZSBsZWZ0b3ZlciBnbW9kdWxlLXdpbjMycmVzLm8gc3R1ZmYuIFRoZQoJYnVpbGQtZGxsIHNjcmlwdCBhdXRvbWFnaWNhbGx5IGhhbmRsZXMgcmVzb3VyY2VzLgoKMjAwMC0wNy0yMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGxpYmdwbHVnaW5fYS5jLCB0ZXN0Z21vZHVsZS5jOiBVc2UgZ19wYXRoX2dldF9iYXNlbmFtZSBpbnN0ZWFkCglvZiB0aGUgZGVwcmVjYXRlZCBnX2Jhc2VuYW1lLgoKMjAwMC0wNy0xOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtb2R1bGUuaDogaW5jbHVkZSBnbGliLmggYmVmb3JlIGRvaW5nIGV4dGVybiAiQyIuIE1ha2VzIHNvbWUgQysrCgljb21waWxlciBoYXBweS4gUmVwb3J0ZWQgYnkgRGVuaXMgVmFrYXRvdgoJPHZha2F0b3ZAcGVvbnkubmxtLm5paC5nb3Y+LgoKMjAwMC0wNy0xOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmM6IERvbid0ICNpbmNsdWRlIDx0bGhlbHAzMi5oPiB3aGVuIGNvbXBpbGluZyB3aXRoCglnY2MsIGFzIGl0IGlzbid0IHByb3ZpZGVkLiBEZWNsYXJhdGlvbiBvZiBhIG5lZWRlZCBzdHJ1Y3QgKGZyb20KCXd3dy5taWNyb3NvZnQuY29tKSBpbnNlcnRlZCBpbnN0ZWFkLgoKMjAwMC0wNS0xMyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS5taW5ndy5pbjogTmV3IGZpbGUsIHdpdGggZ21vZHVsZSBzdHVmZgoJbW92ZWQgZnJvbSAuLi9tYWtlZmlsZS5taW5ndy5pbi4KCgkqIE1ha2VmaWxlLmFtOiBBZGQgdG8gRVhUUkFfRElTVCwgYW5kIGFkZCBydWxlIHRvIG1ha2UgbWFrZWZpbGUubWluZ3cuCgoyMDAwLTA1LTAyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYzogTm8gbmVlZCB0byBpbmNsdWRlIDxwc2FwaS5oPgoKMjAwMC0wMy0yMyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9zeW1ib2wpOiBXaGVuIGxvb2tpbmcgZm9yIHN5bWJvbHMgaW4KCXRoZSAibWFpbiIgbW9kdWxlIHdlIG11c3Qgc2VhcmNoIGJvdGggdGhlIG1haW4gcHJvZ3JhbSBhbmQgYWxsCgljdXJyZW50bHkgbG9hZGVkIERMTHMuIE5vdCBvbmx5IHRoZSBtYWluIHByb2dyYW0sIG9yIGV2ZW4ganVzdCB0aGUKCURMTHMgbG9hZGVkIGFzIGdtb2R1bGVzLiAgTGliZ2xhZGUgcmVxdWlyZXMgdGhpcy4KCglUaHVzIHdlIG5lZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgbW9kdWxlcyBpbiB0aGUgY3VycmVudAoJcHJvY2Vzcy4gVGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZSBBUElzIHRvIGRvIHRoaXM6IFBTQVBJIGFuZAoJVG9vbGhlbHAuIFRoZSBmb3JtZXIgaXMgb25seSBhdmFpbGFibGUgb24gTlQgKGluY2x1ZGluZyBXaW4yayksCgl0aGUgbGF0dGVyIG9uIFdpbjl4IGFuZCBXaW4yay4gQ2hlY2sgd2hpY2ggb25lIHdvcmtzLCBhbmQgdXNlCgl0aGF0LgoKCUZpcnN0IGNoZWNrIGZvciB0aGUgc3ltYm9sIGluIHRoZSBtYWluIHByb2dyYW0sIGFuZCBpZiBub3QgZm91bmQKCXRoZXJlLCBpbiBhbGwgdGhlIG1vZHVsZXMuCgoJQ29kZSBmb3IgdXNpbmcgUFNBUEkgYW5kIFRvb2xoZWxwIHdhcyBib3Jyb3dlZCBmcm9tIHRoZSBEci4gTWluZ3cKCXRvb2wgd3JpdHRlbiBieSBKb3PpIEZvbnNlY2EgPGVtOTYxMTVAZmUudXAucHQ+LiBUaGFua3MuCgoyMDAwLTAzLTA0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYzogQ2FsbCBnX3dpbjMyX2Vycm9yX21lc3NhZ2UoKSB0byBnZXQgdGhlIGVycm9yCgltZXNzYWdlIHN0cmluZ3MuCgoJKiBsaWJncGx1Z2luX2EuYwoJKiBsaWJncGx1Z2luX2IuYwoJKiBnbW9kdWxlLmM6IFJlbW92ZSBMaWJNYWluIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbmVlZGVkIGJ5IExDQywKCXdoaWNoIGlzIG5vdCBhIHN1cHBvcnRlZCBjb21waWxlci4KCgkqIHRlc3RnbW9kdWxlLmMgKG1haW4pOiBUZXN0IGZvciBHX01PRFVMRV9JTVBMID09CglHX01PRFVMRV9JTVBMX1dJTjMyLCBub3QgR19PU19XSU4zMi4KCgkqIGdtb2R1bGVjb25mLmgud2luMzI6IFJlbW92ZSBMQ0Mgc3R1ZmYgZnJvbSBoZXJlLCB0b28uIAoKV2VkIE1hciAgMSAwNTozNDo0NyAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLWJlb3MuYyAoX2dfbW9kdWxlX3N5bWJvbCk6IGRvIG5vdCByZXR1cm4gTlVMTCBzeW1ib2xzLgoKCSogZ21vZHVsZS1vczIuYzogcmVtb3ZlZCBOZXRCU0Qgc3BlY2lmaWMgZGVmaW5lcy4KCShfZ19tb2R1bGVfc2VsZik6IHNldCBhbiBlcnJvciBtZXNzYWdlIGZvciB1bnN1cHBvcnRlZCBiZWhhdmlvdXIuCgoJKiBnbW9kdWxlLWJlb3MuYzogbWFueSBjb2Rpbmcgc3R5bGUgZml4dXBzLgoJKF9nX21vZHVsZV9vcGVuKToKCShfZ19tb2R1bGVfc2VsZik6CgkoX2dfbW9kdWxlX2Nsb3NlKToKCShfZ19tb2R1bGVfc3ltYm9sKTogYnVuY2ggb2YgbWVtb3J5IGxlYWtzIHBsdWdnZWQuCgoJKiBnbW9kdWxlLWRsLmM6IG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIGRsZXJyb3IoKQoJaXMgYWx3YXlzICE9IE5VTEwsIGJ5IHVzaW5nIGEgd3JhcHBlciBmdW5jdGlvbiBmZXRjaF9kbGVycm9yKCkuIGJhc2VkCglvbiBhIHBhdGNoIHRvIGZpeCBfZ19tb2R1bGVfc3ltYm9sKCkgZm9yIE5ldEJTRCBmcm9tIFNjb3R0IFByZXNuZWxsCgk8c3JwQHpnaS5jb20+LgoKCSogZ21vZHVsZS1kbGQuYzogbWlub3IgaW5kZW50YXRpb24uCgoJKiBnbW9kdWxlLXdpbjMyLmM6IG1pbm9yIGNsZWFudXBzLgoKCSogbWVyZ2VzIGZyb20gZ2xpYi0xLTIuCgpTYXQgRmViIDE5IDE5OjQzOjI5IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIHRlc3RnbW9kdWxlLmMgKG1haW4pOiBhZGRlZCB0ZXN0IHRvIGNoZWNrIHRoYXQgbm90IHlldCBib3VuZCBzeW1ib2xzCglpbiBzaGFyZWQgbGlicmFyaWVzIG9mIHRoZSBtYWluIG1vZHVsZSBhcmUgcmV0cmlldmFibGUsIGZyb20gRGF2aWQgR2Vyby4KCjIwMDAtMDEtMTMgIE1hcnRpbiBCYXVsaWcgIDxtYXJ0aW5AaG9tZS1vZi1saW51eC5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBDaGVjayB3aGV0aGVyIGBjaGVja19pbml0JyBpcyBub3QgTlVMTAoJYmVmb3JlIHdlIGF0dGVtcHQgdG8gY2FsbCBpdC4KClN1biBPY3QgIDMgMTk6MzA6NTIgUERUIDE5OTkgTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogZ21vZHVsZS5oCgkqIHRlc3RnbW9kdWxlLmM6IHVzZSBHX09TIHN0dWZmCgpTYXQgSnVsIDI0IDIwOjQ3OjE4IDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIG1lcmdlZCBjaGFuZ2VzIGZyb20gR0xpYi0xLTIgYnJhbmNoLgoKMTk5OS0wNS0wNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLmM6IFJlbW92ZSBMaWJNYWluLgoKU2F0IE1heSAgMSAxMDo1ODo1NyBQRFQgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBNYWtlZmlsZS5hbTogdXNlIC1hdm9pZC12ZXJzaW9uIGFuZCAtbW9kdWxlIGZvciB0ZXN0IHBsdWdpbnMKCk1vbiBBcHIgMTkgMDg6NDM6NTkgMTk5OSAgYXBlQGxyZHBmLnNwYWNldGVjLm5vICAoQXNiam9ybiBQZXR0ZXJzZW4pCgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBnbW9kdWxlLW9zMi5jCgpXZWQgQXByICA3IDIwOjEyOjU4IDE5OTkgIGFwZUBscmRwZi5zcGFjZXRlYy5ubyAgKEFzYmpvcm4gUGV0dGVyc2VuKQoKCSogZ21vZHVsZS1vczIuYzogT1MvMiBzcGVjaWZpYyBmaWxlIGZvciBnbW9kdWxlLgoJKiBnbW9kdWxlLmMgKF9nX21vZHVsZV9vcGVuKTogQWRkIGdtb2R1bGUtb3MyLmMgaWYgR19NT0RVTEVfSU1QTF9PUzIuCgkqIGdtb2R1bGVjb25mLmguaW46IEFkZCBHX01PRFVMRV9JTVBMX09TMi4KCkZyaSBBcHIgMjMgMDk6MDM6NDggMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9zeW1ib2wpOiByZW1vdmVkIGlubGluZSB2YXJpYWJsZSBhc3NpZ25tZW50LgoJcy9DSEVDS19FUlJPUi9TVVBQT1JUX09SX1JFVFVSTi8gdG8gbWFrZSB0aGUgY29kZSBtb3JlIHNlbGYgZGVzY3JpcHRpdmUuCgpXZWQgRmViIDEwIDEyOjA2OjMwIDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoQ0hFQ0tfRVJST1IpOiBiZSBtb3JlIGRlc2NyaXB0aXZlIG9uIHVuc3VwcG9ydGVkIHN5c3RlbXMuCgpXZWQgRmViIDEwIDA3OjU2OjMzIDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfZXJyb3IpOiBmaXhlZCBlcnJlcm5lcm91cyBjb2RlIHdydCB0byB0aHJlYWQKCXNwZWNpZmljIGVycm9yIHN0cmluZyBhbGxvY2F0aW9uIGhhbmRsaW5nLgoKVGh1IEphbiAyMSAxMjo0MDoxMSBFU1QgMTk5OSAgSmVmZiBHYXJ6aWsgIDxqZ2FyemlrQHBvYm94LmNvbT4KCgkqIGdtb2R1bGUtZGwuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOgoJQWRkIGJyYWNlcyB0byBlbGltaW5hdGUgYW4gYW1iaWd1b3VzIGVsc2Ugd2FybmluZy4KCjE5OTktMDEtMTYgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS1kbC5jIGdtb2R1bGUtZGxkLmM6IEluCiAJX2dfbW9kdWxlX2J1aWxkX3BhdGgsIGRvbid0IGFkZCB0aGUgImxpYiIgcHJlZml4IGFuZAogCSIuc28iIG9yICIuc2wiIHN1ZmZpeCBpZiBhbHJlYWR5IHRoZXJlLgoKCSogZ21vZHVsZS13aW4zMi5jOiBMaWtld2lzZSBmb3IgdGhlICIuZGxsIiBzdWZmaXguCgoxOTk4LTEyLTEwICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21vZHVsZS5jOiBNYWRlIGl0IE1UIHNhZmUsIHRoZSBnX21vZHVsZV9lcnJvcigpIGlzIG5vdyB0aHJlYWQKCXNwZWNpZmljLgoKRnJpIE5vdiAyMCAxNDo0Mzo0NCAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogYWRkZWQgZW1wdHkgZGVmYXVsdCBpbWxlbWVudGF0aW9uCglzbyBnbW9kdWxlLnNvIGNvbXBpbGVzIG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIGZpeCBmcm9tCglFcmlrIEJhZ2ZvcnMgPGJhZ2ZvcnNAaHBjMm4udW11LnNlPi4KCjE5OTgtMTEtMTMgIE51bm8gRmVycmVpcmEgIDxubXJmQHJubC5pc3QudXRsLnB0PgoKCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogVGhlIHByZXZpb3VzIGNvbW1pdCBtZXNzYWdlIGlzIHdyb25nCglhYm91dCB0aGUgLUkkKHRvcF9zcmNkaXIpIGJlaW5nIHJlZHVuZGFudC4gSSBwdXQgaXQgYmFjay4KCldlZCBOb3YgMTEgMjM6MjM6MjIgRVNUIDE5OTggSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgoKCSogTWFrZWZpbGUuYW0gOiBJTkNMVURFUyBpcyB0aGUgcmlnaHQgd2F5IHRvIGFkZCB0byBDRkxBR1MsIG5vdCAKCURFRlMuICBBbHNvIHRoZXJlIGFyZSBidWdzIHdpdGggJys9JyBpbiBtYWtlZmlsZXMuCglHb3QgcmlkIG9mIERFRlMgbGluZSBieSBtb3ZpbmcgR19MT0dfRE9NQUlOIHNldHRpbmcgaW50byBJTkNMVURFUy4KCVJlbW92ZWQgcmVkdW5kYW50IC1JIGZyb20gSU5DTFVERVMuCgpUdWUgT2N0IDI3IDA0OjAwOjExIDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIHRlc3RnbW9kdWxlLmMgKG1haW4pOiBjaGFuZ2VkIHRoZSAjaWZkZWYgV0lOMzIgdGVzdCB0byBOQVRJVkVfV0lOMzIsCgl0aGlzIG5lZWRzIHRvIGJlIG1vcmUgY29uc3Rpc3RlbnQgdGhyb3VnaG91dCB0aGUgY29kZSwgZG8gd2UgZ28gZm9yCglOQVRJVkVfV0lOMzIgb3IgV0lOMzI/CgoJKiBnbW9kdWxlLmMgKExpYk1haW4pOiBzcGVjaWFsIGNhc2VkIHRoZSAjaWZkZWYgX19MQ0NfXyBjYXNlIGZvcgoJTkFUSVZFX1dJTjMyLCBzaW5jZSBsY2MgbWF5YmUgdXNlZCBvbiBvdGhlciBwbGF0Zm9ybXMgYXMgd2VsbC4KCSogbGliZ3BsdWdpbl9hLmMgKExpYk1haW4pOiAKCSogbGliZ3BsdWdpbl9iLmMgKExpYk1haW4pOiAKCWxpa2V3aXNlLiBub3Qgc3VyZSBpIGxpa2UgdGhpcyBzcGVjaWFsIHJlcXVpcmVtZW50IGZvciBsY2MgaW4gaGVyZS4KCgkqIGdtb2R1bGUtZGwuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiAKCWZlYXR1cmUgZW1wdHkgIiIgZGlyZWN0b3JpZXMgYW5kIHByZXBlbmQgdGhlIG1vZHVsZSBuYW1lIHdpdGggImxpYiIuCgoJKiBnbW9kdWxlLWRsZC5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IAoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogCglmZWF0dXJlIGVtcHR5ICIiIGRpcmVjdG9yaWVzLgoKCSogd2UgbmVlZCBzb21lIG1vcmUgbWFnaWMgaW4gdGhlIF9nX21vZHVsZV9idWlsZF9wYXRoIHZhcmlhbnRzCglzbyB3ZSBkb24ndCBhcHBlbmQvcHJlcGVuZCBsaWIgYW5kIC5zbywgLnNsIG9yIC5kbGwgZm9yIHRob3NlIG5hbWVzCgl0aGF0IGFscmVhZHkgY29udGFpbiBpdC4KCgkqIGFwcGxpZWQgcGF0Y2ggZnJvbSBUb3IgTGlsbHF2aXN0IGZvciBnX21vZHVsZV9idWlsZF9wYXRoKCkgYW5kCgl3aW5kb3dzIHN1cHBvcnQuCgoxOTk4LTEwLTIwOiBUb3IgTGlsbHF2aXN0IDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS9nbW9kdWxlLXdpbjMyLmM6CglOZXcgZmlsZS4KCgkqIGdtb2R1bGUvZ21vZHVsZS5jIGdtb2R1bGUvZ21vZHVsZS5oOgoJQWRkZWQgdGhlIGZ1bmNpb24gZ19tb2R1bGVfYnVpbGRfcGF0aCB0aGF0IGJ1aWxkcyB0aGUgcGF0aCB0bwoJYSBtb2R1bGUgZmlsZSwgZGVjb3JhdGluZyB0aGUgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSdzCgljb252ZW50aW9ucy4gIEFkZGVkIHRoZSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgoKCSogZ21vZHVsZS9saWJncGx1Z2luX2EuYyBnbW9kdWxlL2xpYmdwbHVnaW5fYi5jOgoJQWRkZWQgTGliTWFpbiBmb3IgTENDLVdpbjMyLgoKCSogZ21vZHVsZS90ZXN0Z21vZHVsZS5jOgoJSGFuZGxlIFdpbmRvd3MgZGxsIG5hbWVzLgoKMTk5OC0xMC0yNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGdtb2R1bGUuaDogUmVtb3ZlIGAjcHJhZ21hIH0nLgoJKiBnbW9kdWxlY29uZi5oLmluOiBMaWtld2lzZS4KCldlZCBPY3QgMjEgMTk6NTg6MjcgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9zeW1ib2wpOiBmaXhlZCBhIHN0cmluZyBwb2ludGVyIGJ1ZyB0aGF0IGNvdWxkCiAJY2F1c2UgZ2FyYmFnZSBlcnJvciBtZXNzYWdlcyBmcm9tIGdfbW9kdWxlX3N5bWJvbCgpIGZvciBzeXN0ZW1zIHRoYXQKCU5FRURfVVNDT1JFLgoKTW9uIFNlcCAyMSAwMTo1NDo0OCAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmg6IAoJKiBnbW9kdWxlLmM6IHJlbmFtZWQgb2xkIF9kZV9pbml0IGZ1bmN0aW9uYWxpdHkgdG8gX3VubG9hZC4KCW1vZHVsZXMgYXJlIG5vdyBleHBlY3RlZCB0byBleHBvcnQ6CglHX01PRFVMRV9FWFBPUlQgY29uc3QgZ2NoYXIqIGdfbW9kdWxlX2NoZWNrX2luaXQgKEdNb2R1bGUgKm1vZHVsZSk7CglhbmQKCUdfTU9EVUxFX0VYUE9SVCB2b2lkIGdfbW9kdWxlX3VubG9hZCAoR01vZHVsZSAqbW9kdWxlKTsKCXJldHVybmluZyBhIHN0cmluZyBvdGhlciB0aGFuIE5VTEwgZnJvbSBnX21vZHVsZV9jaGVja19pbml0KCkgd2lsbAogCXByZXZlbnQgdGhlIG1vZHVsZSBmcm9tIGJlaW5nIGxvYWRlZC4gYSBjYWxsIHRvIGdfbW9kdWxlX21ha2VfcmVzaWRlbnQoKQoJZnJvbSBnX21vZHVsZV91bmxvYWQoKSB3aWxsIHByZXZlbnQgdGhlIG1vZHVsZSBmcm9tIGJlaW5nIHVubG9hZGVkIGFuZAoJc3RpbGwgbWFrZSBpdCByZXNpZGVudC4KClRodSBTZXAgMTcgMDY6MzQ6MjIgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5oOiAKCSogZ21vZHVsZS5jOiBpbXBsZW1lbnRlZCBnX21vZHVsZV9tYWtlX3Jlc2lkZW50KCkgd2hpY2ggY2FuIGJlCgl1c2VkIHRvIG1ha2UgbW9kdWxlcyByZXNpZGVudC4KCWZpeGVkIGEgYnVnbGV0IGFib3V0IHRoZSBvcHRpb25hbCAiZ19tb2R1bGVfZGVfaW5pdCIgZnVuY3Rpb24gaW4KCW1vZHVsZXMsIHdoaWNoIGNvdWxkIGdldCBpbnZva2VkIHR3aWNlIG9uIHZlcnkgb2JzY3VyZSBvY2Nhc2lvbnMuCgpUdWUgU2VwIDE1IDE0OjU3OjMwIDE5OTggIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW06IFVwZGF0ZSB0byBsaWJ0b29sLTEuMmIsCgljaGFuZ2UgbGlicmFyeSB2ZXJzaW9uaW5nIHNjaGVtZSB0byBkcm9wIExUX1JFTEVBU0UKCWZyb20gdGhlIC1sIGxpbmUsIHdoaWxlIGtlZXBpbmcgaXQgaW4gdGhlIHNvbmFtZS4KClRodSBBdWcgMjAgMDc6MDg6MTYgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jOiBwcm92aWRlIG5vIG9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHVuZGVybHlpbmcKCV9nX21vZHVsZV8qIGZ1bmN0aW9ucywgc28gd2UgYXQgbGVhc3QgY29tcGlsZSBvbiBzeXN0ZW1zIHRoYXQgaGF2ZQogCW5laXRoZXIgb2YgR19NT0RVTEVfSU1QTF9ETCBvciBHX01PRFVMRV9JTVBMX0RMRC4KCk1vbiBBdWcgMTcgMDM6NDE6NTIgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5oOgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlCglHTW9kdWxlQ2hlY2tJbml0IGZ1bmN0aW9uIHRvIGJlIGEgc3RyaW5nLCBkZXNjcmliaW5nIHRoZSBlcnJvcgoJY29uZGl0aW9uLgoJKGdfbW9kdWxlX3N5bWJvbCk6IHNob3cgdGhlIGZhaWxpbmcgc3ltYm9sIG9uIGVycm9yIG1lc3NhZ2VzLgoKRnJpIEF1ZyAxNCAwMjoyNDozOSAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBNYWtlZmlsZS5hbTogZmVhdHVyZSB0aGUgR19MT0dfRE9NQUlOIG1hY3JvIHRvIHNldCB0aGUgbG9nIGRvbWFpbgoJdG8gIkdNb2R1bGUiIHVwb24gY29tcGlsYXRpb24uIHdlIGN1cnJlbnRseSBoYXZlIHRvIGFkZCB0aGlzIGRlZmluaXRpb24KCXRvIHRoZSBERUZTIHZhcmlhYmxlLgoJKiB0ZXN0Z21vZHVsZS5jOiB3ZSBuZWVkIGFuIHVnbHkgI3VuZGVmIEdfTE9HX0RPTUFJTiBhdCB0aGUgc3RhcnQKCW9mIHRoaXMgZmlsZSBjdXJyZW50bHksIHNpbmNlIGF1dG9tYWtlIGRvZXNuJ3Qgc3VwcG9ydCBwZXIgdGFyZ2V0CglfQ0ZMQUdTIHlldC4KCk1vbiBBdWcgMTAgMDM6MzU6NTcgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jOiBtaW5vciBjaGFuZ2VzIHRvIGludGVybmFsIGludGVyZmFjZS4KCSogZ21vZHVsZS1kbC5jOiAKCSogZ21vZHVsZS1kbGQuYzogcHV0IHNvbWUgY29tbWVudHMgaW50byB0aGUgZmlsZXMsIGFuZCBwcm92aWRlZAoJYmV0dGVyIGVycm9yIGNoZWNraW5nIGZvciBzaGxfZmluZHN5bSgpLiB3aGlzaCBpIGhhZCBhIHN5c3RlbSB0bwogCXRlc3QgdGhpcyBzdHVmZiBvbi4KCk1vbiBBdWcgMTAgMDI6MTg6MzEgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogTWFrZWZpbGUuYW0gKGxpYl9MVExJQlJBUklFUyk6IGZvciBub3csIHNraXAgdGhlIGRlcGVuZGVuY3kgb24KCS1sZ2xpYiBmb3IgbGliZ21vZHVsZS0xLjEubGEsIGxpYmdwbHVnaW5fYS5sYSBhbmQgbGliZ3BsdWdpbl9iLmxhCglzaW5jZSB0aGlzIGNsYXNoZXMgd2l0aCBpbnRlci1saWJyYXJ5LWRlcGVuZGVuY2llcyBmb3Igbm90IGluc3RhbGxlZAoJbGlicmFyaWVzLiBnbGliLWNvbmZpZyB0YWtlcyBjYXJlIG9mIHRoaXMgZm9yIHRoZSB1c3VhbGwgY2FzZSwgYnV0Cgl0aGVyZSBuZWVkcyB0byBiZSBhIGJldHRlciB3YXkuLi4KClN1biBBdWcgIDkgMTU6NTc6MzggMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogdGVzdGdtb2R1bGUuYzogdGVzdCBwcm9ncmFtIGZvciBHTW9kdWxlLgoJKiBsaWJncGx1Z2luX2EuYzogCgkqIGxpYmdwbHVnaW5fYi5jOiB0ZXN0IHBsdWdpbnMgZm9yIHRlc3RnbW9kdWxlLmMuCgoJKiBnbW9kdWxlLmg6IAoJKiBnbW9kdWxlLmM6IEdNb2R1bGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgYmFzaWNhbGx5CglhIHdyYXBwZXIgYWJvdXQgc3lzdGVtIHNwZWNpZmMgZHluYW1pYyBsb2FkaW5nIGZhY2lsaXRpZXMuCgpTdW4gQXVnICA5IDEwOjMxOjA1IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIENoYW5nZUxvZyBzdGFydCBmb3IgZ21vZHVsZS4K